我刚刚开始学习PHP并且正在使用W3 Schools tut。在错误处理部分中有以下代码:
<?php
function customError($errno,$errstr) {
echo '<b>Error:</b> [$errno] $errstr<br />';
}
set_error_handler('customError');
echo($test);
?>
为什么customError()函数作为字符串传递?这是一个错误吗?
另外,为什么$test
没有定义?
答案 0 :(得分:3)
为什么customError()函数作为字符串传递?
出于同样的原因usort
或ob_start
为函数说明符取字符串。 PHP只需要该函数的名称。函数名称未包含在引号中,尝试作为常量执行或(如果后跟括号)将被执行并将结果传递给函数。
由于PHP 解析文档的执行方式,您必须使用该语言(使用字符串而不是&#34;指针&#34;来调用函数)。
另外,为什么定义了$ test?
这是一个有目的的调用来触发错误。他们试图让你使用一个未定义的变量,所以发生错误,你刚刚编写的代码(使用自定义处理)捕获错误。
答案 1 :(得分:1)
不,这不是错误。它并不常见,但是一些标准的PHP函数接受函数name作为参数,当你必须为同样的原因传递函数时。 set-error-handler
是其中一项功能。
如果您对此感到好奇,可以在这里阅读:
http://it2.php.net/manual/en/language.pseudo-types.php#language.types.callback
答案 2 :(得分:0)
set_error_handler
方法将字符串作为其第一个参数 - &gt; http://php.net/manual/en/function.set-error-handler.php这是为错误调用的函数
echo($test)
导致抛出错误,从而调用customError
函数
答案 3 :(得分:0)
因为customError
实际上并没有作为字符串传递,而是将其名称作为字符串传递给PHP。请参阅http://php.net/manual/en/function.set-error-handler.php,它允许您为PHP指定自定义错误处理函数。