【问题标题】:Variable functions with namespaces in PHPPHP中具有命名空间的变量函数
【发布时间】:2010-11-18 00:42:03
【问题描述】:

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

谢谢!马特

【问题讨论】:

  • 你使用Variable functions错了,它需要是一个变量,而不是字符串和变量。

标签: php namespaces


【解决方案1】:

这也可以,不需要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();
}

【讨论】:

    【解决方案2】:

    当然可以,但不幸的是,您需要使用call_user_func() 来实现:

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

    PHP 中的命名空间是相当新的。我相信将来他们会修复它,这样我们就不再需要call_user_func()了。

    【讨论】:

    • 需要一个参数。这是如何做到这一点的。 echo call_user_func('template\\'.$tag, $params);
    【解决方案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"; }
    

    你有一些信息here

    【讨论】:

    • ::?真的......有人要么没有做功课,要么根本不了解命名空间和类的静态成员之间的区别。
    • 谢谢!不过只是稍微偏了一点!不过,我感谢您的帮助。
    • @Andrew 你是对的。粘贴代码时我搞砸了。谢谢
    【解决方案4】:

    试试这个

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 2011-12-17
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多