PHPのecho、print、print_rの違いは何ですか?


197

私はたくさん使っechoていprint_rますが、ほとんど使っていませんprint

echoはマクロでprint_r、のエイリアスですvar_dump

しかし、それは違いを説明する標準的な方法ではありません。


3
print_rはvar_dumpのエイリアスではありません-別の形式で出力します。特に、var_dumpからの出力には、各変数の「タイプ」も含まれます。
thomasrutter 2013年


追加する必要があるもう1つの詳細は、var_dumpが非常に長いテキストを切り捨てて...を表示し、残りの長さを示すことです。例: '...(length = 4482)エコーを使用する場合、これは発生しません。
ヨルダン

回答:


186

printそしてecho、多かれ少なかれ同じです。どちらも文字列を表示する言語構成要素です。違いは微妙である。print一方、それは式で使用することができるように、1の戻り値を持つecho持つvoid戻り型を、echoこのような使用法はまれですが、複数のパラメーターを取ることができます。echoは少し速いですprint。(個人的に、私は常にを使用しecho、絶対に使用しませんprint。)

var_dump変数のタイプとサブアイテムのタイプ(配列またはオブジェクトの場合)を含む、変数の詳細なダンプを出力します。print_rより人間が読める形式で変数を出力します。文字列は引用符で囲まれず、型情報は省略され、配列サイズは指定されません。

var_dump 通常よりも便利です print_r私の経験でデバッグ時。変数にどのような値/型があるか正確にわからない場合に特に便利です。次のテストプログラムを検討してください。

$values = array(0, 0.0, false, '');

var_dump($values);
print_r ($values);

ではprint_r0and 0.0、またはfalseandの違いはわかりません''

array(4) {
  [0]=>
  int(0)
  [1]=>
  float(0)
  [2]=>
  bool(false)
  [3]=>
  string(0) ""
}

Array
(
    [0] => 0
    [1] => 0
    [2] => 
    [3] => 
)

1
言語構成とは何ですか?
omg

1
@Shore-関数ではない、言語に組み込まれたものです。これらは一般的に非常に高速で、通常の機能とまったく同じように動作しません。
アレックス、

3
2年後、これらのコメントで特定された不正確さを修正するために編集されました。おかげで、私は10月6日7日に寝ていたに違いありません。;-)
ジョンクーゲルマン、2011


5
弁護士の携帯にすばやく!
John

100

エコー

  • カンマで区切られた1つ以上の文字列を出力します
  • 戻り値なし

    例えば echo "String 1", "String 2"

印刷する

  • 単一の文字列のみを出力します
  • 戻り値 1ので、式で使用できます

    例えば print "Hello"

    または、 if ($expr && print "foo")

print_r()

  • 人間が読める1つの値の表現を出力します
  • 文字列だけでなく、配列やオブジェクトを含む他のタイプも受け入れ、それらを読み取り可能にフォーマットします
  • デバッグ時に役立ちます
  • 2番目のオプションの引数が指定されている場合、(エコーではなく)出力を戻り値として返す場合があります

var_dump()

  • コンマで区切られた1つ以上の値を人間が読める形式で出力します
  • 文字列だけでなく、配列やオブジェクトを含む他のタイプも受け入れ、それらを読み取り可能にフォーマットします
  • とは異なる出力形式を使用します。print_r()たとえば、値のタイプも出力します
  • デバッグ時に役立ちます
  • 戻り値なし

var_export()

  • 人間が読める出力とPHP実行可能な任意の表現の1
  • 文字列だけでなく、配列やオブジェクトを含む他のタイプも受け入れ、それらを読み取り可能にフォーマットします
  • 両方に異なる出力形式を使用していますprint_r()し、var_dump()出力を結果することは、有効なPHPコードです- !
  • デバッグ時に役立ちます
  • 2番目のオプションの引数が指定されている場合、(エコーではなく)出力を戻り値として返す場合があります

ノート:

  • print式で使用することはできますが、コードの読みやすさの点で悪いため(そしてこれが役立つことはほとんどないため)、使用しないことをお勧めします。他の演算子と相互作用するときの優先順位規則も混乱する可能性があります。このため、個人的に使用する理由はありませんecho
  • 一方echo、およびprintは言語構造でprint_r()あり、var_dump()/ var_export()は通常の関数です。echoor への引数を囲むのに括弧は必要ありませんprint(そして、それらを使用する場合、式でのように扱われます)。
  • var_export()は有効なPHPコードを返すため、後で値を読み取ることができますが、これを本番用コードに依存すると、を使用する必要があるため、セキュリティの脆弱性が導入されやすくなりますeval()。値を格納して読み取るには、JSONなどの形式を使用することをお勧めします。速度は同等です。

3
echo $a, $b;シンタックスが必要なときにいつ必要なのかについての簡単なメモecho $a . $b;:$ aまたは$ bのいずれかが本当に大きな文字列である場合、後者は追加のメモリを使用し、時間の前にメモリ内の文字列の個別の連結バージョンを作成しますブラウザへの出力を開始できます。
thomasrutter 2014年

もちろん、そのまま使用することecho $a; echo $b;もできます。
thomasrutter 2014年

16

ジョンの回答に追加するechoだけで、ページにコンテンツを印刷するために使用する唯一のものでなければなりません。

print少し遅いです。var_dump()そしてprint_r()唯一のデバッグに使用する必要があります。

また、言及する価値があるということprint_r()var_dump()に2つ目の引数を追加し、デフォルトではエコーされますprint_r()例えば、TRUEと評価は、それが代わりに返すために取得することを、少なくともprint_r($array, TRUE)

エコーとリターンの違いは次のとおりです。

  • echo:値をすぐに出力に出力します。
  • return:関数の出力を文字列として返します。ロギングなどに役立ちます。

問題を提起したからといって、echoINGとreturnINGの違いは何ですか?
デビッドはモニカを

2
うわー、返されるパラメーターについて知っていればいいのに:(基本的に$ foo = print_r($ array、true);を実行して、他の方法で(ログ、テーブルなどに)使用できます)
FryGuy

print_rPHPをコーディングしているときに、返されるパラメーターをよく使用しました。しかし、私は書く傾向がありましたprint_r( $foo, 1 );。タイプする方が速い;)そして、これについては、名前print_rもあまり説明的ではないので、読みやすさについてはあまり気にしません。
exhuma

var_dump()複数の引数を受け入れて出力できるprint_r()ため、2番目の引数はサポートしていませんvar_dump()
thomasrutter

@thomasrutter確かに、なぜそれを書いたのかわかりません。
アレックス

6
echo

戻り型がない

print

戻り値の型があります

print_r()

フォーマット済みの出力、


5

違いエコー印刷しますprint_rのvar_dumpは非常に簡単です。

エコー

echoは実際には関数ではなく、出力を印刷するために使用される言語構造です。印刷よりわずかに高速です。

echo "Hello World";    // this will print Hello World
echo "Hello ","World"; // Multiple arguments - this will print Hello World

$var_1=55;
echo "$var_1";               // this will print 55
echo "var_1=".$var_1;        // this will print var_1=55
echo 45+$var_1;              // this will print 100

$var_2="PHP";
echo "$var_2";                   // this will print PHP

$var_3=array(99,98,97)           // Arrays are not possible with echo (loop or index  value required)
$var_4=array("P"=>"3","J"=>"4"); // Arrays are not possible with echo (loop or index  value required)

括弧の有無にかかわらず、echoステートメントを使用することもできます。

echo ("Hello World");   // this will print Hello World

印刷する

同じように、エコーの構築物の印刷もなく言語構造の実際の関数です。間の違いエコープリントがそれである 印刷 のみ単一の引数を受け入れ、印刷するのに対し、常に1を返します。エコーは戻り値はありません。したがって、printステートメントは式で使用できます。

print "Hello World";    // this will print Hello World
print "Hello ","World"; // Multiple arguments - NOT POSSIBLE with print
$var_1=55;
print "$var_1";               // this will print 55
print "var_1=".$var_1;        // this will print var_1=55
print 45+$var_1;              // this will print 100

$var_2="PHP";
print "$var_2";                   // this will print PHP

$var_3=array(99,98,97)           // Arrays are not possible with print (loop or index  value required)
$var_4=array("P"=>"3","J"=>"4"); // Arrays are not possible with print (loop or index  value required)

echoと同様に、 print は括弧を付けても付けなくても使用できます。

print ("Hello World");   // this will print Hello World

print_r

ますprint_r()関数は、変数に関する人間可読情報を印刷するために使用されます。引数が配列の場合、print_r()関数はそのキーと要素を出力します(オブジェクトも同様)。

print_r ("Hello World");    // this will print Hello World

$var_1=55;
print_r ("$var_1");               // this will print 55
print_r ("var_1=".$var_1);        // this will print var_1=55
print_r (45+$var_1);              // this will print 100

$var_2="PHP";
print_r ("$var_2");                // this will print PHP

$var_3=array(99,98,97)             // this will print Array ( [0] => 1 [1] => 2 [2] => 3 ) 
$var_4=array("P"=>"3","J"=>"4");   // this will print  Array ( [P] => 3 [J] => 4 ) 

var_dump

通常、デバッグに使用されるvar_dump関数。変数/配列/オブジェクトに関する情報(タイプと値)を出力します。

var_dump($var_1);     // this will print  int(5444) 
var_dump($var_2);     // this will print  string(5) "Hello" 
var_dump($var_3);     // this will print  array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } 
var_dump($var_4);     // this will print  array(2) { ["P"]=> string(1) "3" ["J"]=> string(1) "4" }

3

エコー

関数ではなくステートメントです戻り値なし

括弧は不要

配列を印刷しない

印刷する

実機能です

戻りタイプ1

括弧が必要

配列を印刷しない

Print_r

人間が読める形式で印刷する

引用符にない文字列

タイプなどの変数の詳細情報ではありません

var_dump

要素のタイプやサブ要素のような変数のすべてのダンプ情報


2
この回答には非常に多くの問題があります。 printは実際の関数ではなく、echoのような言語構造です。ステートメントとしても使用できます。 echoはステートメントではなく、ステートメントで使用することもできません。 括弧必要ありprintませ。また、echoやprintが関数のように括弧を使用することもありませ。また、主な違いの1つを見逃しました。echoは、コンマで区切られた複数の文字列をエコーとして受け入れます。
thomasrutter

2
...そして、いくつかの回答がすでに存在し、正しい情報が含まれているときに、この回答を送信しました。
thomasrutter

2

** Echocanは複数の式を受け入れることができますが、印刷はできません。Print_r()PHP関数は、人間が読める形式で配列を返すために使用されます。それは単に次のように書かれています

![Print_r ($your_array)][1]

2

echo:echoは、括弧を使用する必要がない言語構造であり、任意の数のパラメーターを取り、voidを返すことができます。

   void echo (param1,param2,param3.....);

   Example: echo "test1","test2,test3";

print:かっこを使用する必要がない言語構造であり、1つのパラメータを取得して返す

    1 always.

           int print(param1);

           print "test1";
           print "test1","test2"; // It will give syntax error

prinf:少なくとも1つの文字列とフォーマットスタイルを取り、出力文字列の長さを返す関数です。

    int printf($string,$s);

    $s= "Shailesh";
    $i= printf("Hello %s how are you?",$s);    
    echo $i;

    Output : Hello Shailesh how are you?
             27



   echo returns void so its execution is faster than print and printf


0

print_r()は値を出力できますが、2番目のフラグパラメータが渡されてTRUEの場合も、出力結果を文字列として返し、何も標準出力に送信しません。var_dumpについて。XDebugデバッガーがインストールされている場合、出力結果はより読みやすく理解しやすい方法でフォーマットされます。


-1

どちらも言語構造です。echoはvoidを返し、printは1を返します。echoは、printよりもわずかに速いと見なされています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.