Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中以字符串形式传递函数_Php - Fatal编程技术网

在php中以字符串形式传递函数

在php中以字符串形式传递函数,php,Php,我刚刚开始学习PHP,正在使用W3学校图坦卡蒙。在错误处理部分有以下代码: <?php function customError($errno,$errstr) { echo '<b>Error:</b> [$errno] $errstr<br />'; } set_error_handler('customError'); echo($test); ?> 为什么customError()函数作为字符串传递?这是图坦卡蒙的错误吗?

我刚刚开始学习PHP,正在使用W3学校图坦卡蒙。在错误处理部分有以下代码:

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

echo($test);
?>

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

方法将字符串作为其第一个参数->这是为错误调用的函数


echo($test)
导致抛出错误,从而调用
customError
函数

,因为
customError
本身并不是作为字符串传递的,而是作为字符串传递给PHP的。请参阅,它允许您为PHP指定自定义错误处理函数。

不,这不是错误。这并不常见,但当出于同样的原因必须传递函数时,一些标准PHP函数会接受函数名作为参数<代码>设置错误处理程序是这些函数之一

如果你对此很好奇,你可以在这里阅读:

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

与函数说明符使用或字符串的原因相同。PHP只需要函数名。将执行一个函数名,该函数名不包含在引号中,try作为常量执行,或者(如果后跟括号),结果将传递给函数

由于PHP解析文档以执行的方式,您必须在该语言的方式下工作(使用字符串而不是函数调用的“指针”)

还有,为什么没有定义$test


这是一个有目的的调用,用于触发错误。他们试图让您使用未定义的变量,因此会发生错误,而您刚刚编写的代码(使用自定义处理)会捕获错误。

您是否有此教程的链接?请使用其他教程进行学习。请参阅PHP手册@aspect中的“回调”部分,为什么会被否决?@codeninja:。w3schools的质量声誉非常糟糕,它们之所以“大”是因为它们花费了大量的时间/金钱,迫使自己在谷歌搜索结果中排名靠前。除了我在评论框中列出的字符外,代码在其他方面都不正确。我毫不怀疑这是W3学校出版的任何教程。此外,还有php.net/来回答初学者的问题。请参阅php.net/set\u error\u handler