【问题标题】:PHP Variable Function Array ValuePHP 变量函数数组值
【发布时间】:2016-10-14 03:09:36
【问题描述】:

我需要为我正在处理的项目使用变量函数名称,但遇到了一些奇怪的问题。函数名最终成为数组中的字符串元素。

这行得通:

$func = $request[2];
$pages->$func();

这不是:

$pages->$request[2]();

我不知道为什么。它抛出一个数组到字符串的转换错误,好像它忽略了我已经为特定元素提供了一个键。这是它的工作原理还是我做错了什么?

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    至于php 5,可以使用花括号语法:

    $pages->{$request[2]}();
    

    足够简单的例子来重现:

    <?php
    
    $request = [
        2 => 'test'
    ];
    
    class Pages
    {
        function test()
        {
            return 1;
        }
    }
    
    $pages = new Pages();
    
    echo $pages->{$request[2]}();
    

    或者(如您在问题中所述):

    $methodName = $request[2];
    $pages->$methodName();
    

    php.net 引用 php 7 案例:

    现在可以间接访问变量、属性和方法 严格按照从左到右的顺序进行评估,而不是前面的 特殊情况的混合。

    在我在此处提供的文档中的引用下方,还有一个关于 php 5php 7 差异的表格。

    您应该考虑哪些事项:

    • 检查$request[2] 的值(它真的是一个字符串吗?)。
    • 检查您的 php 版本(php 5+ 还是 php 7+)。
    • 查看variable functions 上的手册以了解您的版本。

    【讨论】:

    • 谢谢!我正在寻找有关此内容的文档,但找不到。只要计时器允许,我就会接受你的回答。
    • 也打败我,+1 也可以(也许?)使用 ReflectionFunction 类并调用,但这有点矫枉过正。 php.net/manual/en/class.reflectionfunction.php
    • @ArtisticPhoenix 是的,还有call_user_func()。不过,我相信,这个问题更多的是关于语法,而不是问题的解决方案。
    猜你喜欢
    • 2010-12-20
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 2013-06-28
    相关资源
    最近更新 更多