首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何摆脱这里的PHP通知?

问如何摆脱这里的PHP通知?
EN

Stack Overflow用户
提问于 2009-05-21 21:11:59
回答 6查看 2.2K关注 0票数 0
代码语言:javascript
复制
function t1()
{
  echo 1;
}
function t2()
{ 
  echo 2;
}

$funcs = array(t1,t2);

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

当我执行这个小php文件时:

注意:在第11行的D:\jobirn\test\str.php中使用未定义的常量t1 -假定为't1‘

注意:在第11行的D:\jobirn\test\str.php中使用未定义的常量t2 -假定为't2‘

我怎样才能摆脱这些通知呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-05-21 21:48:09

您会注意到这一点,因为PHP不会将函数视为第一类对象。当你这样做的时候

代码语言:javascript
复制
$functions = array(t1, t2);

PHP引擎看到数组和t2,并试图将其解析为常量,但是因为它找不到名为t1/t2的常量,所以它“假定”您想要键入t1 (‘t1’,'t2');如果您输入var_dump($functions),则可以看到数组中的项是字符串。

当您尝试将字符串作为函数调用时,例如

代码语言:javascript
复制
$functions[0]()

PHP将查找与字符串同名的函数。我不会将其称为使用字符串作为函数指针,这更像是使用反射。PHP将其称为“变量函数”,请参阅:

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

因此,删除通知的正确方法是:

代码语言:javascript
复制
$functions = array('t1', 't2');

关于为什么

代码语言:javascript
复制
't1'();

不工作?不幸的是,没有答案。这是PHP,有很多像地狱一样令人讨厌的怪癖。这是同样的怪癖:

代码语言:javascript
复制
explode(':', 'one:two:three')[0];
Parse error: syntax error, unexpected '[' in php shell code on line 1

编辑:

上面提到的数组引用语法在PHP5.4中可用,它被称为数组取消引用。

票数 7
EN

Stack Overflow用户

发布于 2009-05-21 21:17:20

代码语言:javascript
复制
$funcs = array('t1','t2');

不直观,但这就是它的工作方式

票数 6
EN

Stack Overflow用户

发布于 2009-05-21 21:16:02

解决此问题的方法是将php.ini设置从

代码语言:javascript
复制
error_reporting = E_ALL 

至

代码语言:javascript
复制
error_reporting = E_ALL & ~E_NOTICE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/895188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档