複数の if が何段もネストされて見づらいという問題でしょうか?
手法といえば、成功条件A AND 成功条件B AND 成功条件C・・・ は、 失敗条件A OR 失敗条件B OR 失敗条件C・・・ に書き換えられるので、こんなコードに書き換えられます。
php
1<?php
2 if (!$hoge) {
3 error_log('hoge ダメ');
4 } elseif (!$fuga) {
5 error_log('fuga ダメ');
6 } elseif (!$foo) {
7 error_log('foo ダメ');
8 } else {
9 print("OK!!\n");
10 }
ただ条件が複雑になり長くなると、この書き方も見づらくなってしまいます。そんなときは関数を使って、失敗したら早めに return させるという方法が考えられます。
php
1<?php
2 function check_value($x) {
3 $hoge = 'aaaaaaaaaaaaaa';
4 if (!$hoge) {
5 error_log('hoge ダメ');
6 return false;
7 }
8
9 $fuga = 'bbbbbbbbbbbbbbb';
10 if (!$fuga) {
11 error_log('fuga ダメ');
12 return false;
13 }
14
15 $foo = 1 + 2 + 3 + 4 + 5;
16 if ($foo > 10) {
17 error_log('foo ダメ');
18 return false;
19 }
20
21 return true; // チェックNGが一度も起きなければ成功
22 }
戻り値+error_log の替わりに例外を使うとさらに堅牢なコードを書くことが出来ます。
php
1<?php
2 function check_value($x) {
3 $hoge = 'aaaaaaaaaaaaaa';
4 if (!$hoge) {
5 throw new UnexpectedValueException('hoge ダメ');
6 }
7
8 $fuga = 'bbbbbbbbbbbbbbb';
9 if (!$fuga) {
10 throw new UnexpectedValueException('fuga ダメ');
11 }
12
13 $foo = 1 + 2 + 3 + 4 + 5 + $x;
14 if ($foo > 10) {
15 throw new UnexpectedValueException('foo ダメ');
16 }
17 }
18
19 try {
20 check_value(10);
21 } catch (UnexpectedValueException $e) {
22 print('チェックエラーです: '.$e->getMessage()."\n");
23 }
用途に合わせて検討してみてください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/05 10:17