はじめに
最近、同年代の最強エンジニア方からいろいろなアドバイスを頂いているのですがその中で言語の言語仕様そのものについて深く知ることが重要と言われてから自分がよくPHPを使用しているので今一度PHPについて深く勉強しようとした記録です。
言語構造
PHPでよく使うechoやprintなどは関数ではなく言語構造と言われているのですが、そのことについて全然違いを理解していなかったので調べてみました。
if (式) {
}
上記のif文は()の中に式をいれることにより条件に一致する場合は{}の中が実行されます。
if (1 === 1) {
echo 'ok';
}
// とか
if ($result = 'hello') {
echo 'ok';
}
など、他にも沢山の方法があります。
()の中には式を入れるのですが、式とはどういったことを指すの言葉なのでしょうか?
簡潔にいうと、
PHPにおける式とは、値を持つものすべてのこと
このことを踏まえて、最初の話に戻るのですが、echoは言語構造なので()の中に使うとエラーが起きてしまいます。
なら、printはとなるのですがprintは関数の振る舞いをする言語構造になるのでエラーが起きません。
if (print('hello')) {
echo 'world';
}
// hellowolrdと出力される
print()を実行した後、返り値で1が返ってくるのでhellowolrdが出力されます。
このように他にも言語構造では返り値が返ってくるものがあります。
また、言語構造はif文やwhile文など制御構造に近しい部分があるみたいです。
関数のように決まった形である
hello();
とかではなく
echo 'hello';
echo('hello');
のように両方の方法で呼び出せる
@tadsanさんからご指摘を頂きました
echo 1, 2, PHP_EOL; // 記述的にok
echo (1, 2, PHP_EOL); // エラーが出力される
echo()
は式のグルーピングをしているということです
さいごに
自分が普段何気なく使用しているものを深く知ることが、一つ抜き出たエンジニアになれるのではないかと思っているので今後もこのような記事をアップしていきます。
まだまだ、全然理解できていな部分もありますが言語仕様を知ると今までとは違う視点で見ることが出来るので、とにかく楽しいです(笑)