php错误报告

php错误报告,php,oop,reporting,Php,Oop,Reporting,类函数中是否有报告错误的通用标准 我见过一些将错误字符串传递给的c函数,因此如果有错误,可以查看该字符串中的内容,但需要指针 我不愿意使用返回,因为有时您确实需要其他变量的返回 我尝试的一件事是使用一个标准化的返回对象,其中包含一个错误键以及数据。这似乎还可以,但当与其他类一起使用时,似乎有点笨拙 这是我的最新想法,类有一个内部变量$error,每次调用函数时,$error都会被清除,并用错误字符串或数组更新(甚至可能包含多个错误),当函数完成时,我们可以检查错误是否为空 问题是,如果我在函数中

类函数中是否有报告错误的通用标准

我见过一些将错误字符串传递给的c函数,因此如果有错误,可以查看该字符串中的内容,但需要指针

我不愿意使用返回,因为有时您确实需要其他变量的返回

我尝试的一件事是使用一个标准化的返回对象,其中包含一个错误键以及数据。这似乎还可以,但当与其他类一起使用时,似乎有点笨拙

这是我的最新想法,类有一个内部变量$error,每次调用函数时,$error都会被清除,并用错误字符串或数组更新(甚至可能包含多个错误),当函数完成时,我们可以检查错误是否为空

问题是,如果我在函数中使用函数,我最终会清除错误。我可以将字符串保存在不同的var中,并且在返回之前只将其推送到error


是否还有其他方法可以优雅可靠地完成此任务?

没有通用的标准。解决方案完全取决于您的特殊需求

没有共同的标准。解决方案完全取决于您的特殊需求

考虑学习和使用。它们不是通用的解决方案,但如果使用得当,将大大提高代码的可读性和可理解性。

考虑学习和使用。它们不是通用的解决方案,但如果使用得当,将大大提高代码的可读性和可理解性。

这是一个经常争论的话题,没有一个真正的答案

但这里有四种我熟悉的最常见的模式

  • 例外情况
  • 多个返回值/错误代码
  • 误差参数
  • 错误状态
  • 和一个简单的例子

    例外情况

    function doSomething()
    {
      if ( /* expression */ )
      {
        throw new Exception( 'something went wrong' );  
      }
    }
    
    //  Let the registered exception handler do the work
    doSomething();
    
    //  Or handle this call specifically
    try {
      doSomething();
    }
    catch ( Exception $e )
    {
      echo $e->getMessage();
    }
    
    错误代码

    function doSomething()
    {
      if ( /* expression #1 */ )
      {
        return -1;
      }
    
      if ( /* expression #2 */ )
      {
        return -2;
      }
      return 1;
    }
    
    $return = doSomething();
    
    switch ( $return )
    {
      case -1;
        echo 'Error #1 Found';
        break;
      case -2;
        echo 'Error #2 Found';
        break;
      default:
        echo 'Success';
    }
    
    误差参数

    function doSomething( &$error )
    {
      if ( /* expression #1 */ )
      {
        $error = 'Something went wrong';
      }
    }
    
    $error = false;
    
    doSomething( $error );
    
    if ( $error )
    {
      echo $error;
    }
    
    错误状态

    class Foo
    {
      private $error = false;
      private $errorMsg;
    
      public function doSomething()
      {
        if ( /* expression */ )
        {
          $this->setError( 'Something went wrong' );
        }
      }
    
      public function isError()
      {
        return $this->error;
      }
    
      public function getErrorMsg()
      {
        return $this->errorMsg;
      }
    
      private function setError( $message )
      {
        $this->error = true;
        $this->errorMsg = $message;
      }
    }
    
    $f = new Foo();
    $f->doSomething();
    
    if ( $f->isError() )
    {
      echo $f->getErrorMsg();
    }
    

    在为您的项目选择系统(或系统组合)之前,您需要权衡每个系统的优缺点。

    这是一个经常争论的话题,没有一个真正的答案

    但这里有四种我熟悉的最常见的模式

  • 例外情况
  • 多个返回值/错误代码
  • 误差参数
  • 错误状态
  • 和一个简单的例子

    例外情况

    function doSomething()
    {
      if ( /* expression */ )
      {
        throw new Exception( 'something went wrong' );  
      }
    }
    
    //  Let the registered exception handler do the work
    doSomething();
    
    //  Or handle this call specifically
    try {
      doSomething();
    }
    catch ( Exception $e )
    {
      echo $e->getMessage();
    }
    
    错误代码

    function doSomething()
    {
      if ( /* expression #1 */ )
      {
        return -1;
      }
    
      if ( /* expression #2 */ )
      {
        return -2;
      }
      return 1;
    }
    
    $return = doSomething();
    
    switch ( $return )
    {
      case -1;
        echo 'Error #1 Found';
        break;
      case -2;
        echo 'Error #2 Found';
        break;
      default:
        echo 'Success';
    }
    
    误差参数

    function doSomething( &$error )
    {
      if ( /* expression #1 */ )
      {
        $error = 'Something went wrong';
      }
    }
    
    $error = false;
    
    doSomething( $error );
    
    if ( $error )
    {
      echo $error;
    }
    
    错误状态

    class Foo
    {
      private $error = false;
      private $errorMsg;
    
      public function doSomething()
      {
        if ( /* expression */ )
        {
          $this->setError( 'Something went wrong' );
        }
      }
    
      public function isError()
      {
        return $this->error;
      }
    
      public function getErrorMsg()
      {
        return $this->errorMsg;
      }
    
      private function setError( $message )
      {
        $this->error = true;
        $this->errorMsg = $message;
      }
    }
    
    $f = new Foo();
    $f->doSomething();
    
    if ( $f->isError() )
    {
      echo $f->getErrorMsg();
    }
    

    在为项目选择系统(或系统组合)之前,您需要权衡每种方法的优缺点。

    此外,许多库类与自定义异常对象配对在一起。这使它们能够以统一的方式在整个库中全局处理错误。这使他们能够以统一的方式处理整个库中的全局错误。在写下所有这些之后,你真的值得在你的头像图片上喝啤酒:)哇!表达敬意!我无法验证这些信息(由于开始无知和缺乏时间)。但是我确实对清晰和彻底印象深刻。哦,我不知道你可以用PHP函数doSomething(&$error)来做这件事,这会让事情变得更简单,谢谢你在写了所有这些之后,你真的值得在你的头像图片上喝啤酒:)哇!表达敬意!我无法验证这些信息(由于开始无知和缺乏时间)。但是我对明显的清晰性和彻底性印象深刻。哦,我不知道你可以在PHP函数doSomething(&$error)中实现这一点,这让事情变得更简单,谢谢