Echo vs. Print

PHP のこの基本的な領域については、多くの謎と誤った情報があります。 すべてのPHP開発者は、ページ上にテキストを表示させる方法を学びます。 通常、それは echo の助けを借りたものです。 その後、彼らは実際に変数の中に何があるのかを把握しなければならず、print_r() か var_dump() のどちらかを教わり、発見します。

今夜、私はあるワークショップに参加しました。 この種のワークショップは難しいもので、参加者は初心者だけがするような質問をし、しばしば、経験豊富な PHP 開発者が長い間忘れているか、無視している言語の領域について質問するからです。 それから、すべての変数印刷関数の微妙な違いについて考え、そして、それらがいかに詳細に説明されていないかについて考えました。 それを変えましょう!

echo は、関数のように見えるが、そうではない言語構成です。 ドキュメントによると、複数の (文字列) パラメータを出力しますが、これを試行すると構文エラーが発生します:

php > echo("foo", "bar", "baz");
PHP Parse error: syntax error, unexpected ',' in php shell code on line 1

それはともかく、括弧はオプションです:

php > echo "foo"; echo("bar");
foobar

echo は値を返しません。

私は括弧なしで複数の文字列を試してみるべきだったようです。 ご指摘いただいた方、ありがとうございました。 ☺

print

echoとは異なり、printのドキュメントでは単一の文字列を出力すると正しく記述されています。 また、これは厳密には関数ではありませんが、奇妙なことに常に 1 を返します。 その結果、次のようなことが起こります:

php > print "foo"; print("bar"); print print print "baz";
foobarbaz11

奇妙です。

print_r

これらの実質的に類似した構成に続いて、print_r は変数を出力するという考えを展開し始めます。 print_r の背後にある考えは、単一の変数の人間が読める表現を出力/返却することです:

php > print_r("foo"); print_r(2); print_r(true);
foo21

print_r の第2 (boolean) パラメータは、値を返すか出力するかを PHP に指示します。 デフォルトは false です。

php > echo print_r(, true);
Array
(
=> bar
)

print_r は、深くネストされたオブジェクトのために多くの情報を返します。 再帰的な参照を見つけると、それを省略して *RECURSION* と表示します。 また、出力の一部を囲む空白があることにお気づきかもしれませんが、これは出力を読みやすくします。

var_dump

同様に var_dump() は、ひとつ以上の変数の表示を出力します。 echo と同様に、var_dump() のドキュメントには、複数の変数を扱うと書かれています。 echo とは異なり、これは事実のようです。

php > var_dump("foo", "bar");
string(3) "foo"
string(3) "bar"php > var_dump(new StdClass);
class stdClass#1 (0) {
}

var_dump() はネストしたデータも表示しますが、XDebug 拡張をインストールすると、深さが 3 レベルに制限され、さらに表示するには設定の変更が必要です。

必要な XDebug 設定変更は xdebug.var_display_max_depth=n.

var_dump() は余計なホワイトスペースを出力しないため、出力を読みにくくする。 さらに、XDebug 拡張は (構文強調のために) すべてを HTML 要素でラップしますので、 var_dump() の出力を読むことはコマンドラインでは悪夢です。

var_export

var_export() は print_r() に似ていて、直接出力するか、文字列を返すことができます。 しかし、出力/返却は有効なPHP構文です:

php > var_export();
array (
'foo' => 'bar',
)

このメソッドの良い使い方を見つけることはあまりなく、見つけたとしてもおそらく表現を(出力ではなく)返却することになるでしょう。 インスタンスを渡すと、かなり奇妙な表現が得られます:

php > $instance = new Thing();
php > $instance->foo = "bar";
php > var_export($instance);
Thing::__set_state(array(
'foo' => 'bar',
))

このコードが解析された場合、__set_state() メソッドは Thing クラスで呼び出されます。 リソース変数はエクスポートできないことにも注意してください:

php > var_export(fopen("http://google.com", "r"));
NULL

これは、PHP 設定ファイルの読み取り、更新、書き込みという非常に特殊な問題を解決するのに最適です:

return ;

これは config.Library からです。php

$config = file_get_contents("config.php");
$config = "world";
file_put_contents(
"config.php",
"return " . var_export($config, true) . ";"
);

これは update.php

return array (
'foo' => 'bar',
'hello' => 'world',
);

これは config.php

からのものである。

コメントを残す

メールアドレスが公開されることはありません。