我需要为我正在处理的项目使用变量函数名称,但是遇到了一些奇怪的问题。函数名最终作为数组中的字符串元素。
这有效:
$func = $request[2];
$pages->$func();
这不是:
$pages->$request[2]();
我无法弄清楚原因。它抛出一个数组到字符串转换错误,好像它忽略了我已经为特定元素提供了一个键。这是它的工作原理还是我做错了什么?
答案 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]
的值(是否真的是字符串?)。