【PHP日記】

自分の知識不足を悟った末、なるべく1日一回、Webに関する知識を書いていくだけのブログ。

PHP雑学① 【7日目】

PHPを学び始めた素人目線での、大事だったり大事じゃなかったりするただの雑学まとめです。


PHPの閉じタグを書いてはいけない

PHPの中にHTMLを含めるなら、通常は<?phpで始まり?>で終わるというのが普通だと思います。ただしPHPのみで書かれたファイルの場合、最後の?>を書く必要はありません。というより書いてはいけないのです。

なぜかというと、?>があることによりファイルの最後に空白が生まれ出力に影響することがある為です。

例えばheader()を使う際に、この関数はすべての出力の前に呼び出す(コール)必要があるのですが、他のファイルにアクセスした際に余分な空白や改行が含まれていると、その余分な出力の後にヘッダーは出力できずにエラーが起こります。

またどのファイルに空白があるか探す作業は大変なので、?>を書いてはいけません。



printとechoの違い

結論から言うとどちらも同じ、出力バッファに書き込むための言語構造なので、どちらを使っても良いです。

出力バッファとは、指定されたテキストが出力として処理され、クライアントに送信される前に溜め込まれるデータプールのことで、言語構造とは、ifforfunctionなどの言語があらかじめ用意している機能のことです。

そのため、画面に文字を出力するという点において両者に違いはありませんが、機能に少しだけ違いがあります。


echo

  • 複数個の引数を持つことができる

  • 戻り値は返さない

echo '蕎麦','お寿司','ハンバーガー';    // 蕎麦お寿司ハンバーガー
print

  • 引数は一つまで

  • 常に戻り値「1」を返す

  • printは式であり、式の中に書くことができる

$food = print '蕎麦';   // 蕎麦
echo '<br>';
echo $food;   // 1



短絡評価

論理演算子||&&は主にif分などの条件として使いますが、他の文脈でも使用できます。例えば短絡評価はそのうちの一つです。短絡評価は、論理演算子の左辺だけを評価して、右辺の評価を行わない場合がある機能のことです。

$x = 50;
$x === 50 || print "数値ではありません";    // 結果『』
$x === '50' || print "数値ではありません2";    // 結果『数値ではありません2』

||を使った場合、$x50という数値が入っているため、数値の50と厳密な型比較を行った場合は真とみなし、右辺の式は評価されず、画面には何も表示されません。

$x = 50;
$x === 50 && print "数値ではありません";    // 結果『数値ではありません』
$x === '50' && print "数値ではありません2";    // 結果『』

&&を使った場合はそれが逆になり、&&の左辺の式が真とみなされた場合のみ、右辺の式が評価(実行)されます。




参考文献

https://pentan.info/php/delimiter.html

https://www.php.net/manual/ja/function.header.php

https://inouelog.com/php-echo-print/

https://qiita.com/tadsan/items/e09475093bc336881b20

https://www.php.net/manual/ja/function.print.php