我收到此错误:
set_error_handler()期望参数(userErrorAdvice)是有效的回调
trait userErrorAdviceTrait
{
public function userErrorAdvice()
{
$error = error_get_last();
$_SESSION['errorStore'] = $error;
$errorMessage = "No file exists for the PageController";
if (strstr($error['message'], "No file exists for the PageController class"))
{
header('Location: http://192.171.127.39/~louis/errorAdvicePage.php?errorType=NoPageControllerError');
exit;
}
}
public function setUserErrorAdvice()
{
set_error_handler("userErrorAdvice");
}
}
use userErrorAdviceTrait;
public static function makePageController($pageName)
{
//self::shutDownFunction();
//self::shutdown_function();
self::setUserErrorAdvice();
//Rest of code ....
这迫使我写更多详情,但我没有什么可说的。
答案 0 :(得分:1)
我为此做了一个简单的工作测试。这是我要审核的代码
<?php
trait userErrorAdviceTrait
{
public function function userErrorAdvice($errno, $errstr)
{
echo 'error no '.$errno.' and message '.$errstr.PHP_EOL;
}
public function setUserErrorAdvice()
{
set_error_handler("userErrorAdvice");
}
}
class TestErrorFunction
{
use userErrorAdviceTrait;
public static function makePageController($pageName)
{
self::setUserErrorAdvice();
}
}
TestErrorFunction::makePageController('page');
我在这里看到一些问题。让我解释一下并解决它们。
您使用非静态函数作为静态函数。当应该执行方法(函数)userErrorAdvice()
时,它应该'具有'和对象。但是没有为该函数创建对象。
set_error_handler()
函数的参数应为PHP callable。在我们的例子中,没有全局函数userErrorAdvice()
。
有几种可能的方法可以解决问题。例如
<?php
trait userErrorAdviceTrait
{
public static function userErrorAdvice($errno, $errstr )
{
echo 'error no '.$errno.' and message '.$errstr.PHP_EOL;
}
public static function setUserErrorAdvice()
{
set_error_handler([userErrorAdviceTrait::class, "userErrorAdvice"]);
// the other option here
// set_error_handler('userErrorAdviceTrait::userErrorAdvice');
}
}
class TestErrorFunction
{
use userErrorAdviceTrait;
public static function makePageController($pageName)
{
self::setUserErrorAdvice();
include 'no existing file';
}
}
TestErrorFunction::makePageController('page');
此代码产生以下输出。
$ php code.php
error no 2 and message include(no existing file): failed to open stream: No such file or directory
error no 2 and message include(): Failed opening 'no existing file' for inclusion (include_path='.:/usr/share/php')
再一次我做了什么