質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

2712閲覧

if 演算の比較順番について

Tom_S

総合スコア18

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2017/10/20 11:49

if ($hoge == false){ ... }

if (false == $hoge){ ... }

って何か違う意味を持ちますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

全く同じです。ただ、if ($hoge = false)と代入してしまうミスを防ぐために、代入できないfalseを先に書く流儀もあって、「ヨーダ記法」という名前もついていたりします。

ヨーダ記法は本当に不要なのか?(過去の質問)

なお、==の性質上(片方がbooleanだともう片方もbooleanに変換される)、if($hoge == false)if(!$hoge)と同じ意味になります(PHPマニュアル)。基本的に、==での比較は複雑怪奇となりますので、できるだけ===を使うことをおすすめします。

投稿2017/10/20 11:57

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

何か違う意味を持ちますか?

多分 左辺、右辺の順で値を評価してから、2つの値を評価しているはずです。
その場合、左辺・右辺の計算が何か副作用を持っていると、if 文の実行後には変化がでます。
極端な例ですが、以下をご覧ください。
(ruby でかいてますが、他の言語でも同様だと思います)

if.rb

ruby

1a = 0 2if (a=1) != (a=2) 3 puts 'true' 4end 5puts a 6 7a = 0 8if (a=2) != (a=1) 9 puts 'true' 10end 11puts a

実行結果

$ ruby if.rb true 2 true 1

右辺、左辺は、 変数 a に値を設定した後に、その値そのものを表すようになってます。
if 文の両辺の値計算で後に計算された方法の値が a に設定されます。
左辺、右辺の順序を変えても、if の条件文の true/false の判定は同じですが、
a の値は、異なってしまいます。

上の例では、 a の値を変化させているのが明らかだからなにが起こっているかわかります。
でも 比較する両辺が何かのメソッドになっていて、そのメソッド中での副作用があるなら、左辺・右辺のいれ

投稿2017/10/21 14:38

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ockeghem

2017/10/22 09:38 編集

「多分 左辺、右辺の順で値を評価してから、2つの値を評価しているはずです。」 <ここは、現実のPHPはそうなるかもしれませんが、仕様上はそうではありません。PHPのマニュアルには、 「演算子の優先順位や結合性は、あくまでも式のグループ分けだけを決めるものであり、評価順を決めるものではありません。 PHP では一般に、式をどの順番で評価するかは決めていません。 そのため、特定の順序で式が評価されることを前提としたコードを書いてはいけません。 PHP のバージョンが変わったり前後のコードが変わったりしたときに、評価順が変わる可能性があるからです。」 と明記されています。 ご存知の上でのコメントかもしれませんが、念のため。 http://php.net/manual/ja/language.operators.precedence.php
maisumakun

2017/10/24 12:13

あと、PHPではありませんが、C++やRubyのような、==を再定義できる言語の場合、再定義の仕方によっては「a==b」と「b==a」の結果が違うことが起きえます(もっとも、そんな再定義はトラブルの原因にしかならないでしょうが)。
guest

0

式の評価ですから変わりませんね

投稿2017/10/20 11:57

n884

総合スコア100

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問