function t1()
{
  echo 1;
}
function t2()
{ 
  echo 2;
}

$funcs = array(t1,t2);

$length = count($funcs);
for($i=0;$i<$length;$i++)
{
$funcs[$i]();
}

当我执行这个微小PHP文件:

PHP说明:未定义常数T1的使用 - 假定 'T1' 中d:第11行\ jobirn \测试\ str.php

PHP说明:未定义常数T2的使用 - 假定 'T2' 中d:第11行\ jobirn \测试\ str.php

我怎样才能摆脱这些声明的? 12

有帮助吗?

解决方案

您得到通知,因为PHP不把函数作为第一类对象。 当你做到这一点。

$functions = array(t1, t2);

在PHP引擎看到T1和T2,并试图解决它作为一个常量,而是因为它不能找到一个常数名为T1 / T2,它“假设”,你想输入阵列(“T1”,“T2 “); 如果你做的var_dump($函数),你可以看到,数组中的项目都是字符串。

当您尝试调用一个字符串的函数,如

$functions[0]()

PHP将查找具有相同的名称的字符串的函数。我不会把这个作为使用字符串作为函数指针,这更像是使用反射。 PHP称之为 “变量函数”,见:

http://hu2.php.net/manual/en /functions.variable-functions.php

因此,正确的方法摆脱告示是:

$functions = array('t1', 't2');

关于为什么

't1'();

不工作?不幸的是,没有答案。这是PHP,有这些恼人的地狱怪癖好一些。这是相同的怪癖为:

explode(':', 'one:two:three')[0];
Parse error: syntax error, unexpected '[' in php shell code on line 1

编辑:结果 上述阵列引用语法是在PHP5.4可用,这就是所谓的阵列解引用。

其他提示

$funcs = array('t1','t2');

直观,但它是如何工作

在工作轮的这个问题是从

改变php.ini设置
error_reporting = E_ALL 

error_reporting = E_ALL & ~E_NOTICE

检查出的error_reporting()函数:

http://us2.php.net/manual/en /function.error-reporting.php

它允许您配置显示什么错误,通知水平和警告。

例如,如果你想要错误和警告,并没有通知:

使用error_reporting(E_ERROR | E_WARNING);

使用如果你的意思是字符串字符串声明的:

$funcs = array('t1','t2');

也参见varaible功能href="http://docs.php.net/manual/en/functions.variable-functions.php" rel="nofollow noreferrer">章的在PHP手册

要使用字符串来调用一个函数,你应该用花括号

'hello'() // wont work
$hello = 'hello'; $hello() // will work

修改似乎{'}()不工作。我记住它用来>。<

scroll top