例外に関して既に尋ねた質問に基づいて、私はphp関数を間違って書いているか、例外の使用を悪用しているのではないかと心配しています。私がこれを言う理由は、try/catch ブロックを使用してカスタム例外をキャッチする場合、次の関数を使用するためです。
public function get_specific_page($page) {
if (!is_array( $this->_page )){
throw new AisisCore_Template_TemplateException( "<div class='error'>Trying to get a property from a non array.</div>" );
}
return $this->_page[$page];
}
次に、次のように呼び出されます。
try{
get_specific_page($page);
}
catch(Exception $e){
echo $e->getMessage();
}
このアプローチの問題は、このように記述された多くの関数があり、ファイルが存在するかどうかを確認してエラーをスローすることです。値が配列に設定されているかどうかを確認し、エラーをスローします。私の問題は、これらの関数呼び出しを処理するファイルが try catch でオーバーロードされる可能性があることです.....
したがって、私の質問は、try catch ステートメントで過剰にロードされた php ファイルがなくても、独自のカスタム関数を使用できるように、このような関数をどのように記述すればよいかということです。
関数自体の中に try catch を書くのと同じくらい明白ですか?
私が尋ねる理由は、もし私が有名企業や、上記のように私たちの関数を書いている会社で働くことに慣れているからです. これらの関数が大量にあるコードベースをどのように扱ってきましたが、それらを使用しているファイルの半分がたくさんのトライキャッチを実行しているとは思いません...
アップデート:
私は例外をよりよく理解するために zend ソースを調べていて、これに出くわしました:
public function setMessage($messageString, $messageKey = null)
{
if ($messageKey === null) {
$keys = array_keys($this->_messageTemplates);
foreach($keys as $key) {
$this->setMessage($messageString, $key);
}
return $this;
}
if (!isset($this->_messageTemplates[$messageKey])) {
require_once 'Zend/Validate/Exception.php';
throw new Zend_Validate_Exception("No message template exists for key '$messageKey'");
}
$this->_messageTemplates[$messageKey] = $messageString;
return $this;
}
下部近くに新しい例外メッセージをスローする方法を確認できます。この関数は、次のようにして呼び出されることはありません。
try{}catch(){}
それでも例外がスローされた場合、「メッセージ付きのキャッチされていない例外」の問題はありません