我需要使用变量函数名称为我正在工作的一个项目,但遇到了一点奇怪的问题。函数名以数组中的字符串元素结束。
如此:
$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 + ? )。
- 检查您发布的可变功能手册。