我根本没有足够的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
。最好的方法是什么?
我可以提供两个决定:
array_key_exists()
功能手动检查密钥存在。如果key不存在 - 也可以手动抛出异常。但我认为这不是一个好主意,检查这个条件是多余的,因为如果我不写任何东西,PHP编译器将生成警告(注意:未定义的索引:),我想以某种方式使用它。我发现有一些预定义的异常,如OutOfBoundsException
和OutOfRangeException
,只是像在Java中一样使用它们,但似乎PHP不会抛出这些异常,只会发出警告和错误。< / LI>
set_error_handler()
函数将错误和警告“转换”为异常。但还有另一个问题 - 如何处理所有可能的错误?我试图找到PHP错误和警告的完整列表,但是it doesn't exist。
所以我不知道如何解决这个问题,请帮帮我。
在此先感谢,希望即使我的英语水平很差,你也会理解我的问题。P.S。这是一个包含不同类型ascii字符串的正则表达式的数组。
答案 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可以声明一个抛出异常的函数吗?不,不是默认的。你必须尝试在函数中自己捕获异常。