Allied ArchitectsAllied ArchitectsEngineer Blog

PHPの演算子の優先順位

2012/07/4 PHP

こんにちは。アライドアーキテクツの金箱(かねばこ)です。

いきなりですがソースコードを書きます。言語はPHPです。

and と && は論理和を、or と || は論理積を意味します。

この式の実行結果はどうなると思いますか?

閑話休題。PHPでふと何気なく書いてしまったところ、期待した結果が返ってこない

・・・なんて時があったりします。

PHPをはじめプログラム言語には一文字一文字にきちんと意味があります。

意味を正しく理解することで品質の高いプログラムが書けるのだと思います。

さて冒頭のプログラムの実行結果です。

論理和と論理積の説明だけではありえない実行結果が返ってきていることが分かります。

なぜこのような結果になるかというと、タイトルにある演算子の優先順位が関係します。

PHPのドキュメントを見てみます。(http://php.net/manual/ja/language.operators.precedence.php

演算子の優先順位と題された表がありますが、上あるほど優先順位の高い演算子です。

 

注目すべきは、&&とand、そして||とorの優先順位が違うところです。

実は、andとorは代入演算子(=とか)よりも優先順位が低いんです。

 

最初の式をおさらいしてみます。

この式は分かりやすく表現すると次のように解釈されます。

一方で、

この式は、次のように解釈されます。

※丸括弧は優先順位を明示的に表現しています。

このように解釈されるために、冒頭のソースコードの実行結果が異なったわけです。

頭の中で=(イコール)は右辺を計算した後に左辺に代入すると思っていると、思わぬミスを誘発するので注意が必要です。

次の実行結果も注目すべきものだと思います。使いようによっては、とても便利に使えます。

個人的にはあまりandとorを使う機会はありませんが、めちゃくちゃ良い使い方を知っている方はぜひ教えてください。

 

アライドアーキテクツでは、一緒に働く仲間を随時募集しています。andとorの使い方にはちょっとうるさい方は、ぜひ一度採用サイトを覗いてみてください。

金箱 遼
  • 金箱 遼
  • グロースエンジニア
  • サービスのことを考えることと、グロースを考えることが大好きです。 どんどん世の中が便利になってうれしいです。 どうぞよろしくお願いします。

RELATION ENTRY

なぜ新卒のアイディアに価値が有るのか

なぜ新卒のアイディアに価値が有るのか

2014/06/20 その他

おつかれさまです。金箱です。 弊社でも2014年度の新卒として19名を迎えました。 システム部には5名が配属される予定で、システム研修なるものを行っています。 研修を通じて彼らとコミュニケーションをとっていると、または研修外の彼らの成果物をみても、とても価値のあるアイディアを持って...

続きを読む

5月21日に勉強会(AWDD#7)を開催します

5月21日に勉強会(AWDD#7)を開催...

2014/05/7 勉強会・セミナー

こんにちは。 5月21日(水)に7回目の勉強会&交流会を弊社にて開催します。 今回はJavaScript関連のセッションを2つ行います。 詳細&申し込みは下記からお願いします。 JavaScript&TypeScript+Knockout勉強会(AWDD#7) 参加費は無料...

続きを読む

金箱 遼の記事一覧へ

ページTOPへ