##仮にこのような入れ子状態のコードがあったとして
<?php
if( true ) {
echo 1;
if( true ) {
echo 2;
if( true ) {
echo 3;
}
}
}
###「 } 」を誤って消してしまった場合
<?php
if( true ) {
echo 1;
if( true ) {
echo 2;
if( true ) {
echo 3;
// } を誤って消してしまう orz
}
}
すると、このようなエラーがでますね。
Oops_error.html
Parse error: syntax error, unexpected end of file in ~/Oops.php on line 10
これだと行番号が最後にくるので場所がわからない。
調べている間に同僚から「お昼休憩さきに行ってるね」と声をかけられてしまいます。
対策:記述方法を交互に変えて書いてみる
わかりやすいようわかりにくいトラップを仕掛けます。
<?php
if( true ) : // ←
echo 1;
if( true ) {
echo 2;
if( true ) : // ←
echo 3;
endif; // ←
}
endif; // ←
これでミスってみます
<?php
if( true ) :
echo 1;
if( true ){
echo 2;
if( true ) :
echo 3;
// endif; またやってしまったのか orz
}
endif;
このようなエラーになります。
mistake1_error.html
Parse error: syntax error, unexpected '}', expecting elseif (T_ELSEIF) or else (T_ELSE) or endif (T_ENDIF) in ~/mistake1.php on line 9
行番号が2番めの入れ子末尾で止まってくれました。
これでもう少し調べやすくなりましたね。
###記述式が逆だったら
<?php
if( true ) {
echo 1;
if( true ) :
echo 2;
if( true ) {
echo 3;
// }
endif;
}
mistake2_error.html
Parse error: syntax error, unexpected 'endif' (T_ENDIF) in ~/mistake2.php on line 9
これも良い結果ですね。(よくない)
'}' と 'endif' でその上はなにかと考えると解決しやすくなる気がします。
以上、実践で投入しないネタでした。