回答編集履歴
2
優先順位を動かしてみて検証
answer
CHANGED
@@ -7,19 +7,51 @@
|
|
7
7
|
|
8
8
|
---
|
9
9
|
|
10
|
+
【追記&修正】 実際に動作させて検証してみた
|
11
|
+
|
10
12
|
[演算子の優先順位 - PHPマニュアル](http://php.net/manual/ja/language.operators.precedence.php)
|
11
13
|
|
12
|
-
PHPマニュアルによれば`or`や`and`は
|
14
|
+
PHPマニュアルによれば`or`や`and`は最も優先順位が低い演算子で最後に計算されます。
|
13
|
-
`&&`や`||`より結合度が強いのはもちろん、代入演算子よりも強力で、
|
14
15
|
これを意識せずに使うと思わぬ不具合の原因になりえます。
|
15
|
-
(trueやfalseの判定に代入演算子使うなという意見もある)
|
16
16
|
|
17
|
+
実際にPSYSHにて検証したところ、`and`や`or`は常に最後に評価される事を確認できました。
|
18
|
+
|
19
|
+
```Bash
|
20
|
+
$ psysh
|
21
|
+
Psy Shell v0.8.14 (PHP 7.1.14 — cli) by Justin Hileman
|
22
|
+
New version is available (current: v0.8.14, latest: v0.9.4)
|
23
|
+
|
24
|
+
>>> false and true || true // 一般的な感覚だとandが先に結合されて(false || true)になりそうだが
|
25
|
+
=> false // ||の方が優先順位が高い為(false and true)になりfalseを返す
|
26
|
+
|
27
|
+
>>> $hoge = false or true
|
28
|
+
=> true
|
29
|
+
>>> $hoge
|
30
|
+
=> false // ($hoge = false)が先に評価される為、$hogeにはfalseが代入される
|
31
|
+
|
32
|
+
>>> $huga = false || true
|
33
|
+
=> true
|
34
|
+
>>> $huga
|
35
|
+
=> true // (false || true)が先に評価される為、$hugaにはtrueが代入される
|
36
|
+
|
37
|
+
>>> $foo = (false or true)
|
38
|
+
=> true
|
39
|
+
>>> $foo
|
40
|
+
=> true // 丸括弧で優先順位を指定すれば問題ない
|
41
|
+
```
|
42
|
+
|
43
|
+
`and`と`or`演算子はちょっと癖が強いですね。
|
44
|
+
まとめるとこんな感じです。
|
45
|
+
|
46
|
+
- `and`や`or`は、`&&`や`||`と併用してはならない
|
47
|
+
- 代入演算子より弱い`and`や`or`は丸括弧で包む癖を付けた方が良いかも
|
48
|
+
|
17
|
-
|
49
|
+
とにかく質問文にある「`&&`や`and`構文が混ざっている」状況はあまりよろしくなく、
|
18
50
|
どちらでも良いから統一すべきだろうと思います。
|
19
51
|
|
20
|
-
とはいえ、演算子の優先順位
|
52
|
+
とはいえ、演算子の優先順位による不具合は同じ行で混ぜない限りは十分制御可能であり、
|
21
|
-
思想の違う二人のエンジニアが同じ行を
|
53
|
+
思想の違う二人のエンジニアが同じ行を編集しなければ大きな問題は発生しないかと思います。
|
22
|
-
ゆっくり相談して統一していくようにしてください。
|
54
|
+
慌てて修正して不具合を盛り込まないように、まずはチーム内で情報共有&ゆっくり相談して統一していくようにしてください。
|
23
55
|
|
24
56
|
---
|
25
57
|
|
1
演算子の優先順位の考慮も追加
answer
CHANGED
@@ -7,9 +7,25 @@
|
|
7
7
|
|
8
8
|
---
|
9
9
|
|
10
|
+
[演算子の優先順位 - PHPマニュアル](http://php.net/manual/ja/language.operators.precedence.php)
|
11
|
+
|
12
|
+
PHPマニュアルによれば`or`や`and`は極めて高く、
|
13
|
+
`&&`や`||`より結合度が強いのはもちろん、代入演算子よりも強力で、
|
14
|
+
これを意識せずに使うと思わぬ不具合の原因になりえます。
|
15
|
+
(trueやfalseの判定に代入演算子使うなという意見もある)
|
16
|
+
|
17
|
+
従って、質問文にある「`&&`や`and`構文が混ざっている」状況はあまりよろしくなく、
|
18
|
+
どちらでも良いから統一すべきだろうと思います。
|
19
|
+
|
20
|
+
とはいえ、演算子の優先順位の強さは同じ行で両方使うケースでしか発生しません。
|
21
|
+
思想の違う二人のエンジニアが同じ行を触る事で起こり得る問題ですので、直ちに重篤なエラーが出る事はありません。
|
22
|
+
ゆっくり相談して統一していくようにしてください。
|
23
|
+
|
24
|
+
---
|
25
|
+
|
10
|
-
|
26
|
+
PHPのコーディング規約としてよく使われているPSRでは、
|
11
27
|
`and`と`or`、`&&`と`||`のどちらのペアを使うべきかという事には言及されていません。
|
12
|
-
なので
|
28
|
+
なのでマイノリティとされてしまった`and`や`or`も使ってはならないといったルールはありません。
|
13
29
|
|
14
30
|
大事なのは同じファイル内やプロジェクト内で統一することです。
|
15
31
|
どちらに統一するべきかはプロジェクト内の文化や思想に強く影響されます。
|
@@ -19,11 +35,11 @@
|
|
19
35
|
PHPも同様に`and`と`or`を使い、`&&`と`||`は封印するというルールでうまくいくでしょう。
|
20
36
|
|
21
37
|
可読性の為に`and`と`or`を採用するチームというのはあります。
|
22
|
-
|
38
|
+
リーダー的なポジションの人とよく相談して決めてください。
|
23
39
|
|
24
40
|
---
|
25
41
|
|
26
|
-
|
42
|
+
もしPSRを今から調べるのであれば、この記事を確認してください。
|
27
43
|
[PHPのコーディング規約 PSR-0、PSR-1、PSR-2、PSR-3とは - 9ensanのLifeHack](http://9ensan.com/blog/programming/php/php-psr-coding-standards/)
|
28
44
|
|
29
45
|
新しくPSR-4が追加されているようですが、
|