【PHP】「変数」を「インポートできるファイル」に変換して例外を使う_PHPチュートリアル

WBOY
リリース: 2016-07-14 10:06:35
オリジナル
768 人が閲覧しました

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 のソースコードを見たとき、このように書くと、特に後でこのコードを読む人が来たとき、非常にコストがかかります。私たちにはリファクタリングの習慣がありません。例外リファクタリングを使用すると、この問題をうまく解決できます

[php]


試してください{
楽しい1(); 楽しい2(); 楽しい3(); }catch(Exception_FUNC_1 $e){
//エラー処理
}catch(Exception_FUNC_2 $e){
//エラー処理
}catch(Exception_FUNC_3 $e){
//エラー処理
}


試してください{
楽しい1();

楽しい2();

楽しい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;
を返します     }
}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/477914.html技術記事ところで、最近、一本のページで、自分のペイコードがどのように簡単に閲覧できるかについて説明しています。 ..
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート