Php 我如何识别它';是一个错误代码还是一个int?

Php 我如何识别它';是一个错误代码还是一个int?,php,Php,我了解到我可以这样定义我的错误代码: class Hello { /** My own error codes */ const OK = 0; const ERROR = 1; const OTHER = 2; function Test() { /** Return the error code if an error was occurred */ if(an_error_occurred)

我了解到我可以这样定义我的错误代码:

class Hello
{
    /** My own error codes */
    const OK    = 0;
    const ERROR = 1;
    const OTHER = 2;

    function Test()
    {
        /** Return the error code if an error was occurred */
        if(an_error_occurred)
            return self::ERROR;

        /** Simulate some simple result. */
        return rand(0, 10);
    }
}
但我在这方面遇到了一些麻烦:

if($Hello->Test() == Hello::ERROR)
    exit('Something happened.');
即使没有发生错误,它仍然会退出,但是$Hello->Test()给出的值等于1

我如何解决这个问题


或者有更好的方法来定义我自己的错误代码?

您不应该混淆返回值的含义。正如其他人所提到的,例外情况基本上都是这样

class Hello
{
    function Test()
    {
        /** Return the error code if an error was occurred */
        if (an_error_occurred)
            throw new Exception("An error occurred.");

        /** Simulate some simple result. */
        return rand(0, 10);
    }
}
打电话时,你会这样做:

try {
   $foo = $hello->Test();
} 
catch(Exception $e) {
   echo "There was a problem: " . $e->getMessage();
}
只有在测试方法中抛出异常时,才会执行catch块中的代码。您可以创建自己的异常类型,以便针对不同类型的错误对此进行进一步自定义


检查它:

您不应该混合返回值的含义。正如其他人所提到的,例外情况基本上都是这样

class Hello
{
    function Test()
    {
        /** Return the error code if an error was occurred */
        if (an_error_occurred)
            throw new Exception("An error occurred.");

        /** Simulate some simple result. */
        return rand(0, 10);
    }
}
打电话时,你会这样做:

try {
   $foo = $hello->Test();
} 
catch(Exception $e) {
   echo "There was a problem: " . $e->getMessage();
}
只有在测试方法中抛出异常时,才会执行catch块中的代码。您可以创建自己的异常类型,以便针对不同类型的错误对此进行进一步自定义


检查它:

false
并检查
==
您必须确保类常量和返回值集不相交。或者
false
并检查
==
您必须确保类常量和返回值集不相交。但我将使用
$Hello->Test()
在许多不同的地方,如果我不想每次使用try-catch块时都使用它,该怎么办?无论何时使用它,都应该使用try-catch。否则,您将执行和if块来测试错误,这样在try-catch中几乎没有额外的工作,而且安全性更高。例如,您也可以选择忽略错误并在堆栈的更高层捕捉它。当然,如果您正在创建自己的异常类,那么最好创建自己的异常类。如果您不在抛出异常的方法中处理异常,PHP本身将抛出一个错误。因此,你需要以某种方式尝试/抓住。在一个特定的实例中,如果您不关心是否抛出异常——这是不寻常的,因为错误条件往往非常重要——那么您可以提供一个空的catch块,它什么也不做。然而,人们普遍不赞成这样做。业余程序员经常会在代码中乱扔不适当的空catch块,造成各种看不见的问题。但我会在许多不同的地方使用
$Hello->Test()
,如果我不想每次使用try-catch块时都放上它怎么办?你应该在每次使用它时都使用try-catch。否则,您将执行和if块来测试错误,这样在try-catch中几乎没有额外的工作,而且安全性更高。例如,您也可以选择忽略错误并在堆栈的更高层捕捉它。当然,如果您正在创建自己的异常类,那么最好创建自己的异常类。如果您不在抛出异常的方法中处理异常,PHP本身将抛出一个错误。因此,你需要以某种方式尝试/抓住。在一个特定的实例中,如果您不关心是否抛出异常——这是不寻常的,因为错误条件往往非常重要——那么您可以提供一个空的catch块,它什么也不做。然而,人们普遍不赞成这样做。业余程序员通常会在代码中乱扔不适当的空catch块,导致各种看不见的问题。