質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1821閲覧

【PHP】なぜifを閉じてないのに有効になるのか分かりません!

hwudkps

総合スコア26

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/01/02 13:08

wordpressのテンプレートをいじっていたところ、不思議に思うことがあったので質問させてください。
なぜPHPでは下記の制御構造が有効になるんでしょうか?

lang

1<?php if($test): ?> 2<?php if(!$test || !test()) ?> 3<?php elseif($test): ?> 4<?php if(!$test || !test()) ?> 5<?php endif; ?>

これをまともなインデントに変え、タグをすべて削除してみたところ・・・

lang

1<?php 2if($test): 3 if(!$test || !$test()) 4elseif($test): 5 if(!$test || !$test()) 6endif; 7?>

これはインデントされたifステートメントが永遠に終わらないため、無効になります。
そこで質問です。タグを削除すると無効になるのに、タグがある場合に無効にならないのはなぜですか?
PHPファイルを作成し、実行してみました。これは有効になっています。

lang

1<?php if(true): ?> 2<?php if(true) ?> 3<?php endif; ?> 4<?php echo 'ここです'; ?> 5

この疑問への解答お待ちしています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

あなたの(短くした)コード例は以下と同じものです。

lang

1<?php 2if($test): 3if(!$test|| !test()); 4endif; 5?>

?>タグで閉じることで、 ただで"empty statement(何もしない)"を取得します。
実際には以下のように1行にできます。

lang

1<?php if(true): if(true); endif; echo 'ここです'; ?>

ちなみに私の環境下の場合だと一番上のコードもエラーになりました。elseifをどちらともとれる書き方にしているのが原因です。

lang

1<?php 2if($test): 3if(!$test|| !test()); 4elseif($test): // これはどっちのブロックに属しているんでしょうか? 5if(!$test|| !test()); 6endif; 7?>

これは、以下のようにすれば曖昧でなくなります。

lang

1<?php 2if($test){ 3 if(!$test || !$test()); 4 }elseif($test){ 5 if(!$test || !$test()); 6} 7?>

コロンシンタックスを使う場合は曖昧に書くとエラーになるので気をつけてください。

投稿2015/01/02 14:40

emperor

総合スコア427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問