-2

変数の内容を人間が読める形式で出力する、デバッグ用の小さな関数を作成したいと思います。

pr()この関数は、CakePHP フレームワークにあるショートカットに基づいています。つまり、次のようなものです。

私はこれまでのところこれを持っています:

function pr($var,$msg){
    $pr_debug=true;
    if($pr_debug){
        echo "<pre>";
        if($msg) echo "<b>".$msg.": </b>";
        if(gettype($var)=="array" || gettype($var)=="object" ) echo "<br>";
        print_r($var);
        echo "</pre>";
    }
}

変数の内容の前にオプションのメッセージ ($msg) を出力します。

しかし、私が追加したいのは、メッセージが送信されない場合、変数の名前をそのようなメッセージとして出力することです。したがって、次のようなものを取得できます。

$myvar="hello";
pr($myvar); 

//出力する必要があります:

myvar: hello

では、関数内で、変数の名前を文字列として取得して出力できるようにするにはどうすればよいですか? つまり、pr($foo);I need "foo"$name="biz"; pr($$name);I need"biz", など...

できれば、PHP グローバル設定またはそのいずれかに関係なく機能するものが必要です (ちなみに、私はあまりよく理解していないので、GLOBALS に関するヘルプは大歓迎です)。

ありがとう!

おまけ:ここstackoverflowで、ソースコードをフォーマットしてPHPのフォーマットと色を取得するにはどうすればよいですか? 今のところ、テキストエリアのツールバーを単純に使用して、「コードサンプル」を選択しました...

4

1 に答える 1

-1

あなたが望むのは可変変数です...しかし、実際には、それらは必要ありません。それらは、現代のプログラミングにおける「goto」とほぼ同じくらい悪いものです。

$foo = 'bar';
$baz = 'foo';
echo $$baz;   // bar
     ^^-- note the doubled $'s

問題は、デバッグ コードに到達するまでに、変数名の「ソース」が失われていることです。

function debug($out) {
   global $$out;
   echo $out, ': ', $$out;
}

$foo = 'bar';
debug($foo);

名前「$foo」が関数に渡されていないため、これは名前として「foo」を出力しません。の値のみ$foobar入ります。

于 2013-04-10T20:20:03.620 に答える