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

这有效:

$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 5 php 7 的区别,就在我在此处提供的文档中的引用下方。

您应该考虑哪些事项:
  • 检查$request[2]的值(它真的是字符串吗?)。
  • 检查您的php版本(是 php 5+ 还是 php 7+ ?)。
  • 查看variable functions上的手册以供发布。
  • 关于PHP变量函数数组值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40034319/

    10-11 23:23
    查看更多