PHP可变函数数组值

时间:2016-10-14 03:09:36

标签: php arrays

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

这有效:

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

这不是:

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

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

1 个答案:

答案 0 :(得分:6)

对于 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 5 php 7 的差异表,这个问题就在我在这里提供的文档的引用之下。

您应该考虑哪些事项:

  • 检查$request[2]的值(是否真的是字符串)。
  • 检查你的php版本( php 5 + 还是 php 7 + )。
  • 检查variable functions上的手册以了解您的发布。