🍋
JSの中でPHPを使ったときに戸惑った論理判定
拡張子phpのファイル内で、html、js、phpを使用していて、論理式が思っているものと違ったのでそのときのメモ✏️
- phpファイルで以下を実行すると、consoleに何が表示されるかで戸惑った
phpファイル
<script>
let test = <?= (strpos('bbbb', 'nnn') !== false ? 'true' : 'false') ?>;
if (test) {
console.log("test1");
} else {
console.log("test2");
}
</script>
上記では、test = 'false'
のように文字列のfalseが代入されてtest1
が表示されると思っていたけど、
コンソールにはtest2
が表示される。
testには文字列が渡されるんじゃないの??と戸惑った
文字列ではなく論理値が渡された理由
◎ PHPの短縮タグ <?=
を使用すると、PHPの評価結果がそのまま出力される。
なるほど!💡
なんとなく使っていたけど、<?=
は、<?php echo
の省略形
たとえば、echo "やほー"
を実行したら、やほー
が出力されるように、
クォート、ダブルクォートは表示されない。
同じようにechoの省略形の<?=
を使った、<?= 'false' ?>
では、false
が出力される。
クォートは付かずに出力されるのでfalse
は論理値として認識される
<?= (strpos('bbbb', 'nnn') !== false ? 'true' : 'false') ?>
なので test = falseとなってtest2
が表示される。
falseを文字列として表示したい場合
json_encodeを使うか、下記のようにクォートをつけるかにすると、test = 'false'
のようにfalseが文字列として認識される。
"'" . (strpos('bbbb', 'nnn') !== false ? 'true' : 'false') . "
json_encode関数ではPHPデータをJSON形式に変換するので、文字列がダブルクォートで囲まれる。
Discussion