【发布时间】:2016-10-14 03:09:36
【问题描述】:
我需要为我正在处理的项目使用变量函数名称,但遇到了一些奇怪的问题。函数名最终成为数组中的字符串元素。
这行得通:
$func = $request[2];
$pages->$func();
这不是:
$pages->$request[2]();
我不知道为什么。它抛出一个数组到字符串的转换错误,好像它忽略了我已经为特定元素提供了一个键。这是它的工作原理还是我做错了什么?
【问题讨论】:
我需要为我正在处理的项目使用变量函数名称,但遇到了一些奇怪的问题。函数名最终成为数组中的字符串元素。
这行得通:
$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] 的值(它真的是一个字符串吗?)。【讨论】:
call_user_func()。不过,我相信,这个问题更多的是关于语法,而不是问题的解决方案。