PHP中具有名称空间的变量函数

时间:2009-08-09 01:04:16

标签: php namespaces

我想知道是否有办法用命名空间调用变量函数。基本上我正在尝试解析标签并将它们发送到模板函数,以便它们可以呈现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,期待第76行的T_STRING

谢谢!马特

4 个答案:

答案 0 :(得分:7)

这也可以,call_user_func,只需使用Variable functionsDocs功能:

require_once 'template.php';

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

答案 1 :(得分:5)

当然可以,但不幸的是,您需要使用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 :(得分:1)

尝试

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

您有一些信息here

答案 3 :(得分:0)

试试这个

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

$test = new $test2;