PHP:如何在下面的情况下处理异常

时间:2013-01-31 20:10:33

标签: php exception

我根本没有足够的PHP和编程经验,所以我想知道,在我的情况下最好的决定是什么。 这是我的代码示例:

public static function isAscii($string, $type, $length = -1)
    {
        if (!is_string($string))
            throw new InternalException(ExceptionMessage::invalidFunctionParameterType(__CLASS__, __METHOD__));

        if ($length !== -1 && !Str::isValidLength($string, $length))
            return FALSE;

        $ascii_array = Constants::asciiRegex();

        if (!preg_match($ascii_array[$type], $string))
            return FALSE;

        return TRUE;
    }

我想确保数组$type存在密钥$ascii_array。最好的方法是什么?

我可以提供两个决定:

  1. 最简单的。只需使用array_key_exists()功能手动检查密钥存在。如果key不存在 - 也可以手动抛出异常。但我认为这不是一个好主意,检查这个条件是多余的,因为如果我不写任何东西,PHP编译器将生成警告(注意:未定义的索引:),我想以某种方式使用它。我发现有一些预定义的异常,如OutOfBoundsExceptionOutOfRangeException,只是像在Java中一样使用它们,但似乎PHP不会抛出这些异常,只会发出警告和错误。< / LI>
  2. 使用set_error_handler()函数将错误和警告“转换”为异常。但还有另一个问题 - 如何处理所有可能的错误?我试图找到PHP错误和警告的完整列表,但是it doesn't exist。 所以我不知道如何解决这个问题,请帮帮我。 在此先感谢,希望即使我的英语水平很差,你也会理解我的问题。
  3. P.S。这是一个包含不同类型ascii字符串的正则表达式的数组。enter image description here

1 个答案:

答案 0 :(得分:2)

我希望我正确理解这个问题 - 您基本上是在询问是否存在自然的内部异常,而不是运行您自己的异常?

或者你只是不知道你可以做类似的事情:

try
{
    //some code to try
    if (!in_array($type, $ascii_array)) {
        throw new Exception('type not in ascii array');
    }
}
catch(Exception $e) {
    die ('my custom exception message: ' . $e->getMessage());
}

如果我错过了这一点,请告诉我,我可能会更新。

至于不抛出自己的例外的原因......我不能说我知道这对此有实际好处。在我看来,in_array()是完全可以接受的,抛出异常可能只是个人偏好,而不一定是表现的值得关注。

修改

考虑到我的答案和问题,值得注意的是,这个答案被接受了,可能是因为评论中的结论是PHP不允许你声明像Java那样抛出异常的函数。简单地说。

所以这个答案只是为了这个目的。 PHP可以声明一个抛出异常的函数吗?不,不是默认的。你必须尝试在函数中自己捕获异常。