Edited at

PHPの三項演算子のネストに気をつけようって話

More than 1 year has passed since last update.


はじめに

可読性の話でちらほら出てくる気がする三項演算子です。一行で書けるような簡単な処理を記述する際は便利ですし可読性も良いので使える場面では積極的に使っていくべきだと個人的には思います。

ここで問題となるのがネストの扱いです。

三項演算子のネストは可読性が悪いからやめましょう的なやつですが、三項演算子のネストのネストならともかく三項演算子のネスト程度なら読めるっしょ的な感覚で記述される方もいるかと思います。

PHPでは、紛らわしいことになるのでやめましょう。


PHPの三項演算子は左結合

PHPの三項演算子は、他の主要な言語とネストの評価順序が異なっており、左から評価して行きます。


sample.php

<?php  

echo 'a' ? 'b' : 'c' ? 'd' : 'e'; //result: d

上記PHPの例では、dが出力されます。

三項演算子を持つ他言語だとbが出力されます。

なぜPHPだけ左結合なのかというと、間違って実装してしまい今更修正不可能だからそのままになっているらしいです。


PHPの三項演算子のネストは止めよう

知ってしまえば間違えようがないとは思いますが、別言語に慣れた人だと同じ感覚で使って事故る危険や読み間違える危険があります。

レビューでも、人によっては気づかない可能性があると思います。

無駄に混乱させるだけで三項演算子のネストに大きなメリットを見出すことができないため、コーディング規約で三項演算子のネストを禁止するのが良いと思います。


まとめ

PHPの三項演算子は左結合です。

PHPで三項演算子のネストは止めよう。