在php中将函数作为字符串传递

时间:2011-12-05 16:15:54

标签: php

我刚刚开始学习PHP并且正在使用W3 Schools tut。在错误处理部分中有以下代码:

<?php
function customError($errno,$errstr) {
    echo '<b>Error:</b> [$errno] $errstr<br />';
}
set_error_handler('customError');

echo($test);
?>

为什么customError()函数作为字符串传递?这是一个错误吗? 另外,为什么$test没有定义?

4 个答案:

答案 0 :(得分:3)

  

为什么customError()函数作为字符串传递?

出于同样的原因usortob_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指定自定义错误处理函数。