PHP可变函数数组值

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

这有效:

$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 for php 7案例:

Indirect access to variables, properties, and methods will now be
evaluated strictly in left-to-right order, as opposed to the previous
mix of special cases.

还有一个表格为php 5和php 7差异,这个问题就在我在这里提供的文档中引用的下方.

你应该考虑哪些事情:

>检查$request [2]的值(它真的是一个字符串吗?).
>检查你的PHP版本(是PHP 5还是php 7?).
>检查variable functions上的手册以了解您的发布.

转载注明原文:PHP可变函数数组值 - 代码日志