Taotutu、私は最近「Code Simplicity」という本を読みました。この本ではコードを読みやすくする方法について説明されており、とても勉強になりました。興味のあるお友達は覗いてみてはいかがでしょうか。
PHPer は例外をほとんど使用しません。たとえあなたが会社の偉い人であっても、例外を使用しないかもしれません。多くの場合、例外は単にエラー コードの別の実装として扱われます。前回のブログで異常について触れたのを覚えていますが、誰もそれを支持しなかったようです。
想像してください: コード内で次の状況が発生します:
[php]
if(($retCode = fun1()) == 0){
$html = "こんにちは、世界";
If(($retCode = fun2()) == 0){
If(($retCode = fun3()) == 0){
}その他{
}
}その他{
//何か問題が発生しました
}
}その他{
//エラー
}
if(($retCode = fun1()) == 0){
$html = "こんにちは、世界";
if(($retCode = fun2()) == 0){
if(($retCode = fun3()) == 0){
}その他{
//何か問題が発生しました
}
}その他{
//何か問題が発生しました
}
}その他{
//エラーが発生しました
}
上記のコードをご存知ですか?以前 discuz のソースコードを見たとき、このように書くと、特に後でこのコードを読む人が来たとき、非常にコストがかかります。私たちにはリファクタリングの習慣がありません。例外リファクタリングを使用すると、この問題をうまく解決できます
試してください{
楽しい1();
楽しい2();
楽しい3();
}catch(Exception_FUNC_1 $e){
//エラー処理
}catch(Exception_FUNC_2 $e){
//エラー処理
}catch(Exception_FUNC_3 $e){
//エラー処理
}
試してください{
楽しい1();
楽しい3();
}catch(Exception_FUNC_1 $e){
//エラー処理
}catch(Exception_FUNC_2 $e){
//エラー処理
}catch(Exception_FUNC_3 $e){
//エラー処理
}
もっと良くないですか?さらに最適化することはできますか?
[php]
楽しい1();
楽しい2();
楽しい3();
}catch(例外 $e){
エコー $e->getMessage();
}
関数 fun1(){
新しい例外をスローします("入力が空です", 10001);
}
試してください{
楽しい1();
楽しい2();
楽しい3();
}catch(例外 $e){
echo $e->getMessage();
}
関数 fun1(){
throw new Exception("入力が空です", 10001);
}
メリットは何ですか?
1. 何か問題が発生した場合の心配をせずに、通常のプロセスに集中できます
2. エラー部分を統一的に処理し、エラー、ログ、トレースバックを返します
3. カスタマイズされているため、エラー コードのセットを維持する必要はなく、自由にエラー タイプを追加できます
4. コード構造が明確であり、メンテナンスコストが低いです
5. 独自のクラス (smarty や phpunit など) は独自の記録メソッドを持ち、エラーが存在するシステムには関連付けられません。
個人的な習慣にもよりますが、個人的には強くお勧めします
このようなニーズがあります:
変数 (配列、文字列、数値など) をファイルに出力して、このファイルが他の php ファイルにインクルードされた後にこの変数を使用できるようにしたいと考えています。
[php]
$a = 配列(
0 => 'abc'、
1 => 配列(
'abc' => '2345'
)
);
// ファイルに出力される内容は次のとおりです:
{
配列を返します(
0 => 'abc'、
1 => 配列(
'abc' => '2345'
)
);
}
$a = 配列(
0 => 'abc',
1 => 配列(
'abc' => '2345'
)
);
// ファイルに出力される内容は次のとおりです:
配列を返します(
0 => 'abc',
1 => 配列(
'abc' => '2345'
)
);
}
その後、インクルード後の次のファイルは次のとおりです:
[php]
$a = include("file.php");
$a = include("file.php");
具体的には、メモリ上のデータをシリアライズするだけでなく、アンシリアライズする必要もないので便利な方法です。悪い点は、オブジェクトやハンドルを操作できないことです。
これは私が書いたものです:
[php]
クラスコード
{
/**
* 変数を文字列に変換します
*
* @param 文字列、数値、配列のみを含む $var 変数を混合
* @param string $pfx プレフィックス、出力内容は読みやすいです
*
* @戻り文字列
*/
パブリック関数 var2Str($var, $pfx = ''){
$str = '';
If(is_array($var)){
$str = "array(n";
)
$pfx .= "t";
foreach($var as $k => $v){
If(is_string($k)){
$k = ""{$k}"";
$str .= $pfx . "{$k} => . $this->var2Str($v, $pfx) .
$str .= $pfx ")";
}elseif(is_int($var) || is_float($var)){
$str = "{$var}";
}elseif(is_string($var)){
$str = ""{$var}"";
戻り $str;
}
}
クラスコード
{
/**
* 変数を文字列に変換します
*
* @parammixed $var 文字列、数値、配列を含む変数のみ
* @param string $pfx プレフィックス、出力内容は読みやすいです
*
* @戻り文字列
*/
パブリック関数 var2Str($var, $pfx = ''){
$str = '';
if(is_array($var)){
$str = "array(n";
)
$pfx .= "t";
foreach($var as $k => $v){
if(is_string($k)){
$k = ""{$k}"";
}
$str .= $pfx 。 "{$k} => " . $this->var2Str($v, $pfx) 。 "、ん";
}
$str .= $pfx 。 ")";
}elseif(is_int($var) || is_float($var)){
$str = "{$var}";
}elseif(is_string($var)){
$str = ""{$var}"";
}
$str;
を返します
}
}