gpt4 book ai didi

php - set_error_handler() 收到无效回调?

转载 作者:行者123 更新时间:2023-12-03 08:27:30 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How can I make set_error_handler() call a method on an object?

(3 个回答)


6年前关闭。




我收到此错误:

set_error_handler() expects the argument (userErrorAdvice) to be a valid callback


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 ....

这迫使我写更多细节,但我无话可说。

最佳答案

我为此做了一个简单的工作测试。这是我要查看的代码

<?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')

    再来一次我做了什么
  • 固定的可调用参数。
  • 将方法定义为静态,因为它们在静态上下文中使用。
  • 关于php - set_error_handler() 收到无效回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37042160/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com