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;
    }

$type配列にキーが存在することを確認したい$ascii_array。それを行うための最良の方法は何ですか?

私は2つの決定を提供することができます:

  1. もっとも単純な。機能を使って手動でキーの存在を確認するだけarray_key_exists()です。キーが存在しない場合は、手動でも例外をスローします。しかし、これは良い考えではないと思います。この条件をチェックするのは冗長です。何も書かないとPHPコンパイラーが警告を生成し(注意:未定義のインデックス:)、これを何らかの方法で使用したいからです。OutOfBoundsExceptionやのような事前定義された例外がいくつかある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 に答える