2

何らかの理由で、私は usingprintf($var)よりも using を採用しましたecho $var。理由はよくわかりません。

ただし、変数から文字列を出力する際に​​問題が発生した場合、変更printf($var)するecho $varと、90% の確率で問題が修正されるようです。

これは、引数が少なすぎることから、null/空白の文字列をエコーすることまで、さまざまなエラーで複数回発生しました。

printf()より信頼性が低いと思われる理由について、誰かが光を当てることができますechoか?

4

4 に答える 4

6

短い答えprintf($var)です。特に必要な場合を除き、使用しないでください。

その理由は、最初の引数として渡されたものはフォーマット文字列$varとして扱われ、やなどには特別な意味があるためです。C / C++ では、これによりセグメンテーション違反が発生する可能性がありますが、PHP では、比較すると手首に平手打ちが発生します。%s%d

echoまたはと同等printですprintf('%s', $var)。文字列にキャスト$varしてから出力します。

ところで、printf()は関数ですが、echoprintは言語構造です。したがって、 を使用するとパフォーマンスが向上する可能性がありますecho

于 2012-10-22T04:27:17.333 に答える
3

printfを使用する場合とは大きく異なりますecho。まずprintf、値を返す関数ですが、は通常「言語構造echo」と呼ばれるものです。

の最初の引数は、名前が示すとおり、出力された文字列をフォーマットするために使用されるformat-stringprintfであると想定されています。

echoは、渡された「パラメータ」をそのまま(つまり、変数補間の後で)出力しますが、前述のように、最初のフォーマット文字列printfに従って動作します。

たとえば、以下のスニペットを試して、いくつかの大きな違いに注目してください。

echo   "I like %s! hello ", "world", " /stackoverflow" ;
echo   "\n"
printf ("I like %s! hello ", "world", " /stackoverflow");

出力

I like %s! hello world /stackoverflow
I like world! hello

私のBlackBerryを使用して作成および編集しました。フォーマットエラーが発生しました。

于 2012-10-22T04:24:25.663 に答える
3

printf — フォーマットされた文字列を出力し、print は値を返します。常に 1 を返し、echo の動作 — 1 つまたは複数の文字列を出力する

常に 1 を返すことは役に立たないようです。また、引数のコンマ区切りリストは、文字列連結または複数の呼び出しでシミュレートできます

print 関数は、値を返すという点で echo 関数よりもわずかに動的であり、echo 関数はわずかに (非常にわずかに) 高速です。この関数は、 、 、 などの特別な区切り文字を使用して、必要printfな場所に動的変数などを挿入します。たとえば、を返します。%s%dprintf('There is a difference between %s and %s', 'good', 'evil')'There is a difference between good and evil'

このPHP を確認してください: ベンチマーク echo vs. print vs. printf

そして結果

echo と print は、速度の点で非常に近いようです。コマンドごとの違いは、わずか 2/1,000,000 秒でした。それは個人的な好みに帰着します。最初に使用したのは echo であるため、これを使用します。印刷時の速度低下は、変数を割り当てると発生するように見えますが、その時点でコマンド速度は 1/100,000 秒低下しますが、これはまだかなりマイナーです。

リンクの上のフォーム

于 2012-10-22T04:20:09.203 に答える
0

echo — 1 つ以上の文字列を出力する

echo は実際には関数ではありません (言語構造です) ので、括弧を使用する必要はありません。echo (他の一部の言語構造とは異なり) は関数のように動作しないため、常に関数のコンテキストで使用できるとは限りません。さらに、echo に複数のパラメーターを渡したい場合は、パラメーターを括弧で囲まないでください。

printf — フォーマットされた文字列を出力する

出力された文字列の長さを返します

于 2012-10-22T04:25:23.383 に答える