Переменные функции с пространствами имен в PHP - PullRequest
11 голосов
/ 09 августа 2009

Мне интересно, есть ли способ вызывать переменные функции с пространствами имен. В основном я пытаюсь разобрать теги и отправить их в функции шаблона, чтобы они могли отображать html`

Вот пример: (я использую 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"; }

Я продолжаю получать Ошибка разбора: синтаксическая ошибка, неожиданный T_VARIABLE, ожидающий T_STRING в ... в строке 76

Спасибо! Matt

Ответы [ 4 ]

7 голосов
/ 09 августа 2009

Это также будет работать, нет необходимости в call_user_func, просто используйте Функции переменных Документы :

require_once 'template.php';

$ns = 'template';
foreach (array('javascript', 'script', 'css') as $tag) {
    $ns_func = $ns . '\\' . $tag;
    echo $ns_func();
}
5 голосов
/ 09 августа 2009

Конечно, вы можете, но, к сожалению, вам нужно использовать call_user_func() для достижения этой цели:

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

Пространства имен в PHP довольно новы. Я уверен, что в будущем они это исправят, поэтому нам больше не потребуется call_user_func().

1 голос
/ 09 августа 2009

попробуй с

 // 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"; }

у вас есть информация здесь

0 голосов
/ 13 марта 2012

Попробуйте это

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

$test = new $test2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...