ホームページ >バックエンド開発 >PHPチュートリアル >【PHP】「変数」を「インポートできるファイル」に変換する方法と間違った使い方

【PHP】「変数」を「インポートできるファイル」に変換する方法と間違った使い方

WBOY
WBOYオリジナル
2016-06-13 13:05:18973ブラウズ

【PHP】「変数」を「インポートできるファイル」に変換する方法と例外の使い方

最近「コードを簡潔にする方法」という本を読みました。作り方 自分のコードが読みやすくなり、大きな恩恵を受けています。興味のあるお友達は覗いてみてはいかがでしょうか。

PHPer は例外をほとんど使用しません。たとえ会社の偉い人であっても、例外を使用しないかもしれません。多くの場合、例外は単にエラー コードの別の実装として扱われます。前回のブログで異常について触れたのを覚えていますが、誰もそれを支持しなかったようです。

想像してください: コード内で次の状況が発生します:

<?php

if(($retCode = fun1()) == 0){
	$html = "Hello,world";
	if(($retCode = fun2()) == 0){
		if(($retCode = fun3()) == 0){
		}else{
			//出错了
		}
	}else{
	//出错了
	}
}else{
//出错了
}

上記のコードに見覚えがありますか?以前 discuz のソースコードを見たとき、このように書くと、特に後でこのコードを読む人が来たとき、非常にコストがかかります。私たちは実際にはリファクタリングの習慣がありません。例外リファクタリングを使用すると、この問題を解決できます

<?php

try{
	fun1();
	fun2();
	fun3();
}catch(Exception_FUNC_1 $e){
	//错误处理
}catch(Exception_FUNC_2 $e){
	//错误处理
}catch(Exception_FUNC_3 $e){
	//错误处理
}

もっと良いんじゃないでしょうか?さらに最適化することはできますか?

<?php

try{
	fun1();
	fun2();
	fun3();
}catch(Exception $e){
	echo $e->getMessage();
}

function fun1(){
	throw new Exception("Your input is empty", 10001);
}

メリットは何ですか?

1. 何か問題が発生した場合の心配をせずに、通常のプロセスに集中できます

2. 統一された方法でエラーを処理し、エラー、ログ、トレースバックを返します

3. エラー タイプを自由に追加できます。カスタマイズされているため、一連のエラー コードを維持する必要はありません

4. コード構造が明確であり、メンテナンスコストが低い

5. 独自のクラス (smarty や phpunit など) は独自の記録メソッドを持ち、それらが存在するシステムとは結合されません。

個人的な習慣にもよりますが、個人的には強くお勧めします


そのようなニーズがあります:

変数 (配列、文字列、数値など) をファイルに出力して、このファイルが他の php ファイルにインクルードされた後にこの変数を使用できるようにしたいと考えています。

<?php


$a = array(
	0 => 'abc',
	1 => array(
		'abc' => '2345'
	)
);


//输出到文件的内容是:

{
	return array(
		0 => 'abc',
		1 => array(
			'abc' => '2345'
		)
	);
}
次に、インクルード後の次のファイルは次のとおりです:

$a = include("file.php");
すでにこのデータがあります。
具体的には、メモリ上のデータをシリアライズするだけでなく、アンシリアライズする必要もないので便利な方法です。悪い点は、オブジェクトやハンドルを操作できないことです。

これは私が書いたものです:

<?php

class Code
{
	/**
	 * 将变量转化为字符串
	 *
	 * @param mixed $var 仅包含字符串、数字、数组的变量
	 * @param string $pfx 前缀,输出的内容容易被读
	 *
	 * @return string
	 */
    public function 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) . ",\n";
            }       
            $str .= $pfx . ")";
        }elseif(is_int($var) || is_float($var)){
            $str = "{$var}";
        }elseif(is_string($var)){
            $str = "\"{$var}\"";
        }       
        return $str;
    }
}
試してみてください~
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。