2009-08-09 8 views
11

Je me demande s'il existe un moyen d'appeler des fonctions de variables avec des espaces de noms. Fondamentalement, je suis en train d'analyser les balises et les envoyer à des fonctions de modèle afin qu'ils puissent rendre html`Fonctions variables avec espaces de noms en PHP

Voici un exemple: (j'utilise PHP 5,3)

// Main php file 
require_once 'template.php'; 
foreach (array("javascript","script","css") as $tag) { 
    echo template\$tag(); 
} 

// template.php 
namespace template; 

function javascript() { return "Hello from javascript"; } 
function css() { return "Hello from css"; } 
function script() { return "Hello from script"; } 

Je continue de recevoir Parse error: erreur de syntaxe, inattendue T_VARIABLE, attend T_STRING dans ... sur la ligne 76

Merci! Matt

+1

question de Nice ...... –

+0

Vous utilisez le [ * Fonctions variables *] (http://php.net/manual/fr/functions.variable-functions.php) incorrect, il doit être une variable, pas une chaîne et une variable. – hakre

Répondre

5

Bien sûr, vous pouvez, mais malheureusement, vous devez utiliser call_user_func() pour y parvenir:

require_once 'template.php'; 
foreach (array("javascript","script","css") as $tag) { 
    echo call_user_func('template\\'.$tag); 
} 

espaces de noms en PHP sont assez nouveau. Je suis sûr que dans le futur, ils le répareront donc nous n'aurons plus besoin de call_user_func().

+2

Nécessaire un paramètre. Voici comment faire ça. echo call_user_func ('template \\'. $ Tag, $ params); – Matt

1

essayer avec

// Main php file 
require_once 'template.php'; 
foreach (array("javascript","script","css") as $tag) { 
    call_user_func("template\\$tag"); // As of PHP 5.3.0 
} 

// template.php 
namespace template; 

function javascript() { return "Hello from javascript"; } 
function css() { return "Hello from css"; } 
function script() { return "Hello from script"; } 

vous avez quelques informations here

+0

'::'? Vraiment ... Quelqu'un n'a pas fait ses devoirs ou n'a tout simplement pas compris la différence entre un espace de noms et un membre statique d'une classe. –

+0

Merci! Seulement un peu hors! J'apprécie l'aide cependant. – Matt

+0

@Andrew vous aviez raison. Je l'ai foiré quand est collé le code. merci –

7

Cela permettra également de travailler, pas besoin de call_user_func, il suffit d'utiliser la fonction Variable functionsDocs:

require_once 'template.php'; 

$ns = 'template'; 
foreach (array('javascript', 'script', 'css') as $tag) { 
    $ns_func = $ns . '\\' . $tag; 
    echo $ns_func(); 
} 
+0

C'est aussi plus rapide. Voir les docs php. – Rudie

0

Essayez cette

$p = 'login'; 
namespace App\login; 
$test2 = '\App\\'.$p.'\\MyClass'; 

$test = new $test2; 
Questions connexes