回答編集履歴

2

優先順位を動かしてみて検証

2018/05/29 16:17

投稿

miyabi-sun
miyabi-sun

スコア21194

test CHANGED
@@ -16,31 +16,95 @@
16
16
 
17
17
 
18
18
 
19
+ 【追記&修正】 実際に動作させて検証してみた
20
+
21
+
22
+
19
23
  [演算子の優先順位 - PHPマニュアル](http://php.net/manual/ja/language.operators.precedence.php)
20
24
 
21
25
 
22
26
 
23
- PHPマニュアルによれば`or`や`and`は極めて高く、
27
+ PHPマニュアルによれば`or`や`and`は最も優先順位が低い演算子で最後に計算されます。
24
-
25
- `&&`や`||`より結合度が強いのはもちろん、代入演算子よりも強力で、
26
28
 
27
29
  これを意識せずに使うと思わぬ不具合の原因になりえます。
28
30
 
31
+
32
+
29
- (trueやfalseの判定代入演算子使うなという意見もあ)
33
+ 実際にPSYSHにて検証したところ、`and`や`or`は常最後に評価され事を確認できました。
30
34
 
31
35
 
32
36
 
37
+ ```Bash
38
+
39
+ $ psysh
40
+
41
+ Psy Shell v0.8.14 (PHP 7.1.14 — cli) by Justin Hileman
42
+
43
+ New version is available (current: v0.8.14, latest: v0.9.4)
44
+
45
+
46
+
47
+ >>> false and true || true // 一般的な感覚だとandが先に結合されて(false || true)になりそうだが
48
+
49
+ => false // ||の方が優先順位が高い為(false and true)になりfalseを返す
50
+
51
+
52
+
53
+ >>> $hoge = false or true
54
+
55
+ => true
56
+
57
+ >>> $hoge
58
+
59
+ => false // ($hoge = false)が先に評価される為、$hogeにはfalseが代入される
60
+
61
+
62
+
63
+ >>> $huga = false || true
64
+
65
+ => true
66
+
67
+ >>> $huga
68
+
69
+ => true // (false || true)が先に評価される為、$hugaにはtrueが代入される
70
+
71
+
72
+
73
+ >>> $foo = (false or true)
74
+
75
+ => true
76
+
77
+ >>> $foo
78
+
79
+ => true // 丸括弧で優先順位を指定すれば問題ない
80
+
81
+ ```
82
+
83
+
84
+
85
+ `and`と`or`演算子はちょっと癖が強いですね。
86
+
87
+ まとめるとこんな感じです。
88
+
89
+
90
+
91
+ - `and`や`or`は、`&&`や`||`と併用してはならない
92
+
93
+ - 代入演算子より弱い`and`や`or`は丸括弧で包む癖を付けた方が良いかも
94
+
95
+
96
+
33
- 従って、質問文にある「`&&`や`and`構文が混ざっている」状況はあまりよろしくなく、
97
+ とにかく質問文にある「`&&`や`and`構文が混ざっている」状況はあまりよろしくなく、
34
98
 
35
99
  どちらでも良いから統一すべきだろうと思います。
36
100
 
37
101
 
38
102
 
39
- とはいえ、演算子の優先順位の強さは同じ行で両方使うケースしか発生しません。
103
+ とはいえ、演算子の優先順位による不具合は同じ行で混ぜない限りは十分制御可能あり、
40
104
 
41
- 思想の違う二人のエンジニアが同じ行を触る事で起こり得る問題ですので、直ちに重篤エラーが出る事はありせん
105
+ 思想の違う二人のエンジニアが同じ行を編集しなければ大きな問題は発生しいかと思い
42
106
 
43
- ゆっくり相談して統一していくようにしてください。
107
+ 慌てて修正して不具合を盛り込まないように、まずはチーム内で情報共有&ゆっくり相談して統一していくようにしてください。
44
108
 
45
109
 
46
110
 

1

演算子の優先順位の考慮も追加

2018/05/29 16:17

投稿

miyabi-sun
miyabi-sun

スコア21194

test CHANGED
@@ -16,11 +16,43 @@
16
16
 
17
17
 
18
18
 
19
+ [演算子の優先順位 - PHPマニュアル](http://php.net/manual/ja/language.operators.precedence.php)
20
+
21
+
22
+
23
+ PHPマニュアルによれば`or`や`and`は極めて高く、
24
+
25
+ `&&`や`||`より結合度が強いのはもちろん、代入演算子よりも強力で、
26
+
27
+ これを意識せずに使うと思わぬ不具合の原因になりえます。
28
+
29
+ (trueやfalseの判定に代入演算子使うなという意見もある)
30
+
31
+
32
+
33
+ 従って、質問文にある「`&&`や`and`構文が混ざっている」状況はあまりよろしくなく、
34
+
35
+ どちらでも良いから統一すべきだろうと思います。
36
+
37
+
38
+
39
+ とはいえ、演算子の優先順位の強さは同じ行で両方使うケースでしか発生しません。
40
+
41
+ 思想の違う二人のエンジニアが同じ行を触る事で起こり得る問題ですので、直ちに重篤なエラーが出る事はありません。
42
+
43
+ ゆっくり相談して統一していくようにしてください。
44
+
45
+
46
+
47
+ ---
48
+
49
+
50
+
19
- ですが、PHPのコーディング規約としてよく使われているPSRでは、
51
+ PHPのコーディング規約としてよく使われているPSRでは、
20
52
 
21
53
  `and`と`or`、`&&`と`||`のどちらのペアを使うべきかという事には言及されていません。
22
54
 
23
- なので別に`and`や`or`使ってはならないといったルールはありません。
55
+ なのでマイノリティとされてしまった`and`や`or`使ってはならないといったルールはありません。
24
56
 
25
57
 
26
58
 
@@ -40,7 +72,7 @@
40
72
 
41
73
  可読性の為に`and`と`or`を採用するチームというのはあります。
42
74
 
43
- 別のチムにジョする際、気になる場合は同僚に問いかけてください。
75
+ ダー的なポョンの人とよく相談し決めてください。
44
76
 
45
77
 
46
78
 
@@ -48,7 +80,7 @@
48
80
 
49
81
 
50
82
 
51
- 因みにPSRに関してはこの記事を確認してください。
83
+ もしPSRを今から調べるのであれば、この記事を確認してください。
52
84
 
53
85
  [PHPのコーディング規約 PSR-0、PSR-1、PSR-2、PSR-3とは - 9ensanのLifeHack](http://9ensan.com/blog/programming/php/php-psr-coding-standards/)
54
86