0

我根本没有足够的 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;
    }

我想确保 key$type存在于 array $ascii_array。最好的方法是什么?

我可以提供两个决定:

  1. 最简单的。只需使用array_key_exists()功能手动检查密钥是否存在。如果 key 不存在 - 也手动抛出异常。但我认为这不是一个好主意,检查这个条件是多余的,因为如果我不写任何东西,PHP 编译器会生成警告(注意:未定义索引:)我想以某种方式使用它。我发现有一些预定义的异常,比如OutOfBoundsExceptionand OutOfRangeException,像在 Java 中一样使用它们会很容易,但是 PHP 似乎不会抛出这些异常,只会抛出警告和错误。
  2. 使用set_error_handler()函数将错误和警告“转换”为异常。但是还有另一个问题 - 我如何处理所有可能的错误?我试图找到 PHP 错误和警告的完整列表,但它不存在。所以我不知道如何解决这个问题,请帮助我。在此先感谢,即使我的英语水平很差,也希望您能理解我的问题。

PS 这是一个包含不同类型 ascii 字符串的正则表达式的数组。在此处输入图像描述

4

1 回答 1

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 可以声明一个抛出异常的函数吗?不,默认情况下不是。您必须自己尝试在函数中捕获异常。

于 2013-01-31T20:22:41.883 回答