5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPでif入れ子の閉じをうまくミスる

Last updated at Posted at 2018-08-14

##仮にこのような入れ子状態のコードがあったとして

<?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' でその上はなにかと考えると解決しやすくなる気がします。

以上、実践で投入しないネタでした。

5
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?