PHP变量函数数组值


PHP Variable Function Array Value

我需要使用变量函数名称为我正在工作的一个项目,但遇到了一点奇怪的问题。函数名以数组中的字符串元素结束。

如此:

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

这并不:

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

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

对于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 + ? )。
  • 检查您发布的可变功能手册。