Переменные функции с пространствами имен в PHP
Мне интересно, есть ли способ вызвать переменные функции с пространствами имен. В основном я пытаюсь разобрать теги и отправить их в функции шаблона, чтобы они могли отображать 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
Ответы
Ответ 1
Конечно, вы можете, но, к сожалению, вам нужно использовать call_user_func()
, чтобы достичь этого:
require_once 'template.php';
foreach (array("javascript","script","css") as $tag) {
echo call_user_func('template\\'.$tag);
}
Пространства имен в PHP довольно новы. Я уверен, что в будущем они исправят это, поэтому мы больше не будем требовать call_user_func()
.
Ответ 2
Это также будет работать, не нужно call_user_func
, просто используйте Функции переменных Docs:
require_once 'template.php';
$ns = 'template';
foreach (array('javascript', 'script', 'css') as $tag) {
$ns_func = $ns . '\\' . $tag;
echo $ns_func();
}
Ответ 3
попробуйте
// 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"; }
у вас есть информация здесь
Ответ 4
Попробуйте это
$p = 'login';
namespace App\login;
$test2 = '\App\\'.$p.'\\MyClass';
$test = new $test2;