VPRINTFは、文字列をフォーマットして画面に出力するためのPHPで非常に実用的な機能です。これは、 printf関数のバリアントです。主な違いは、 vprintfが引数として配列を受け入れるのに対し、 printfは複数の個別の引数を順番に受け入れることです。 VPRINTFは複数のパラメーターを簡単に処理できますが、使用するときに無視できる落とし穴がいくつかあります。これらのヒントを習得すると、よくある間違いを避けることができます。
printf関数と同様に、 VPRINTFは、文字列で定義されたプレースホルダーのフォーマットにも、変数を正しく挿入することに依存しています。したがって、渡されたパラメーターの数とタイプは、フォーマットされた文字列のプレースホルダーの要件と厳密に一致する必要があります。それ以外の場合、プログラムはエラーを投げたり、予期しない結果を出力したりします。
例えば:
<span><span><span class="hljs-variable">$args</span></span><span> = [</span><span><span class="hljs-number">42</span></span><span>, </span><span><span class="hljs-string">"Hello, World!"</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">vprintf</span></span><span>(</span><span><span class="hljs-string">"The number is %d and the string is %s"</span></span><span>, </span><span><span class="hljs-variable">$args</span></span><span>);
</span></span>
この例では、 %dは整数42に置き換えられ、 %sは文字列「Hello、World!」に置き換えられます。 。 1つのパラメーターを1つ渡すか、パラメータータイプが一致しない場合、プログラムはエラーを発生させます。
VPRINTFを使用する場合、各プレースホルダー( %d 、 %s 、 %fなど)は、対応するパラメーターのデータ型と一致する必要があります。たとえば、 %dは整数タイプを予想し、 %fは浮動数を予想します。データ型が誤っていると、出力が誤っている場合、または場合によってはプログラムがクラッシュします。
<span><span><span class="hljs-variable">$args</span></span><span> = [</span><span><span class="hljs-number">3.14</span></span><span>, </span><span><span class="hljs-string">"PHP"</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">vprintf</span></span><span>(</span><span><span class="hljs-string">"Value is %d and message is %s"</span></span><span>, </span><span><span class="hljs-variable">$args</span></span><span>); </span><span><span class="hljs-comment">// ここ %d 整数を一致させる必要があります,しかし、渡されるのは浮動的な値です</span></span><span>
</span></span>
これにより、エラーや出力が予想どおりではありません。したがって、各フォーマットシンボルが対応するパラメータータイプと一致するようにすることが、 VPRINTFを使用する鍵です。
VPRINTFの利点の1つは、引数として配列を受け入れることですが、ここでの順序は、フォーマットされた文字列のプレースホルダーの順序と一致する必要があります。それ以外の場合、出力は混乱します。
例えば:
<span><span><span class="hljs-variable">$args</span></span><span> = [</span><span><span class="hljs-string">"Hello, World!"</span></span><span>, </span><span><span class="hljs-number">42</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">vprintf</span></span><span>(</span><span><span class="hljs-string">"The string is %s and the number is %d"</span></span><span>, </span><span><span class="hljs-variable">$args</span></span><span>);
</span></span>
配列に注文を交換する場合:
<span><span><span class="hljs-variable">$args</span></span><span> = [</span><span><span class="hljs-number">42</span></span><span>, </span><span><span class="hljs-string">"Hello, World!"</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">vprintf</span></span><span>(</span><span><span class="hljs-string">"The string is %s and the number is %d"</span></span><span>, </span><span><span class="hljs-variable">$args</span></span><span>);
</span></span>
出力の結果は次のようになります。
<span><span>The </span><span><span class="hljs-built_in">string</span></span><span> </span><span><span class="hljs-keyword">is</span></span><span> </span><span><span class="hljs-number">42</span></span><span> </span><span><span class="hljs-keyword">and</span></span><span> the number </span><span><span class="hljs-keyword">is</span></span><span> Hello, World!
</span></span>
この間違った順序は、データに混乱を引き起こす可能性があるため、 VPRINTFに渡された配列を正しい順序で確認する必要があります。
場合によっては、特に文字列に特殊文字が含まれている場合、出力にVPRINTFを使用すると問題が発生する可能性があります。文字列に%または他の特別なシンボルが含まれている場合、フォーマットされたシンボルに誤って解析される場合があります。これを避けるために、キャラクターを逃がすことで解決できます。
例えば:
<span><span><span class="hljs-variable">$args</span></span><span> = [</span><span><span class="hljs-string">"%d is the value"</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">vprintf</span></span><span>(</span><span><span class="hljs-string">"The number is %s"</span></span><span>, </span><span><span class="hljs-variable">$args</span></span><span>);
</span></span>
ここでは、 %Dはプレースホルダーとして誤解されるため、2倍の記号%%を使用して脱出する必要があります。
<span><span><span class="hljs-variable">$args</span></span><span> = [</span><span><span class="hljs-string">"%%d is the value"</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">vprintf</span></span><span>(</span><span><span class="hljs-string">"The number is %s"</span></span><span>, </span><span><span class="hljs-variable">$args</span></span><span>);
</span></span>
このようにして、 %%は、プレースホルダーとしてではなく、個別の%文字として出力されます。
浮動値を出力する必要がある場合は、フォーマットシンボルを使用して精度を制御できます。 %fはデフォルトで6小数点以下の場所を出力しますが、出力の小数点以下の場所の数を指定できます。このようにして、数字の表示をより柔軟に制御できます。
<span><span><span class="hljs-variable">$args</span></span><span> = [</span><span><span class="hljs-number">3.1415926535</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">vprintf</span></span><span>(</span><span><span class="hljs-string">"The value of pi is %.2f"</span></span><span>, </span><span><span class="hljs-variable">$args</span></span><span>);
</span></span>
これは出力されます:
<span><span>The </span><span><span class="hljs-keyword">value</span></span><span> of pi </span><span><span class="hljs-keyword">is</span></span><span> </span><span><span class="hljs-number">3.14</span></span><span>
</span></span>
ここでは、 %.2Fとは2つの小数の場所を維持することを意味します。小数点以下の場所が指定されていない場合、PHPはデフォルトで6桁の場所を出力します。
VPRINTFは文字列のフォーマットをより柔軟にしますが、 VPRINTFへの頻繁な呼び出しは、特に大量のデータを処理する場合、非常に長い文字列をフォーマットする必要がある場合にパフォーマンスに影響を与える可能性があります。フォーマットされた文字列を頻繁に出力する必要がある場合は、フォーマットされたプロセスを関数の外側に配置して、不必要な呼び出しを削減することを検討できます。
VPRINTFを使用する場合、最も重要なことは、フォーマットされたシンボルがデータ型と一致するようにし、配列転送の注文の問題を回避し、特殊文字を合理的に処理し、精密な制御を処理することです。これらの手法を習得することにより、一般的な間違いを避け、コードをより効率的で読みやすくすることができます。