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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

3516閲覧

ifで開始タグのみを変化させる場合に対応する閉じタグがずれる

workr

総合スコア158

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/07/29 01:21

PHP に限った話ではないですが、テンプレート中で <div> などの開始タグだけに対して if を使うと、テキストエディタや IDE の対応する終了タグがずれてしまったり、自動インデントが崩れたりします。

html

1<?php if( $hasImage ): ?> 2<div class="has-image" style="background: url(...)"> 3<?php else: ?> 4<div class="no-image"> 5<?php endif; ?> 6<!-- ここにコンテンツが入ります。 --> 7</div>

テキストエディタの認識では開始タグが2個、閉じタグが1個と数えられてしまいます。

かといって次のように書くと同じものを2度書かなくてはいけなくなります。
コンテンツ部分の内容はどちらも同じです。

html

1<?php if( $hasImage ): ?> 2<div class="has-image" style="background: url(...)"> 3<!-- ここにコンテンツが入ります。 --> 4</div> 5<?php else: ?> 6<div class="no-image"> 7<!-- ここにコンテンツが入ります。 --> 8</div> 9<?php endif; ?>

もちろんこの程度の差であれば次のように書いてしまえば十分ですがもっと差が大きなケースも含めて想定しています。

php

1echo ($hasImage) ? 'class="has-image" style="background:url(...)"' : 'class="no-image"';

テキストエディタは VSCode、IDE には PhpStorm を使っているので特殊な環境ではないと思っています。
このようなケースできれいに書くにはどのようにしていますか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

個人的には最初の例は div の構造が分かりづらいので一番嫌です。ぱっと見、div の入れ子に見えてしまいます。

2番目はHTMLの構造はわかりやすいものの冗長ですよね。そもそもメインはコンテンツであり、class や style の場合分けのためだけにブロックを分けるのも何だかなーという感じです。

というわけで3番目の class のスイッチは class の定義のところに書くというのが一番分かりやすいと思います。ただ例のようにHTMLの構文も含めてしまうと見づらいので、あくまで "値" をPHPでスイッチさせるのがベターだと思います。で、文が長くなりそうなら前もって組み立てて変数に入れておいたり、関数化するのも良いかもしれません。

php

1<?php 2function makeStyle($hasImage) 3{ 4 if ($hasImage) { 5 return 'background="hoge.jpg"; color:#FFF;'; 6 } else { 7 return ''; 8 } 9} 10?> 11 12<div class="<?= $hasImage ? 'has-image' : 'no-image' ?>" style="<?= makeStyle($hasImage) ?>"> 13 <p>コンテンツ</p> 14</div>

php

1<?php 2if ($hasImage) { 3 $block_class = 'has-image'; 4 $block_style = 'background="hoge.jpg"; color:#FFF;'; 5} else { 6 $block_class = 'no-image'; 7 $block_style = ''; 8} 9?> 10 11<div class="<?= $block_class ?>" style="<?= $block_style ?>"> 12 <p>コンテンツ</p> 13</div>

もっと突き詰めていくなら、素直に Twig などのテンプレートエンジンを採用するのがよいかと思います。

投稿2017/08/04 13:45

miyahan

総合スコア3095

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

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

0

個人的には HTML, PHP が混在するコードが好きではないので、完全にファイルを分化する構成にしています。

  1. index.php には PHP のコードのみを書き、HTML, CSS, JavaScript のコードは一切書かない
  2. index.php から file_get_contents() で非公開フォルダにある index.html (雛型HTML)を読み込み、変数 $htmlString に格納する
  3. 変数 $htmlStringpreg_replace() で必要に応じて書き換える
  4. echo $htmlString

step 3 では、予め、目印となる規則性のあるマークアップをしておいて書き換えます。

HTML

1<div class="has-image"><!-- $hasImage --></div>

上記HTMLであれば、<!-- $hasImage --> を置換して内容を挿入するか、親要素となるdiv要素毎置換するか、選択することが出来ます。

Re: workr さん

投稿2017/07/29 09:49

think49

総合スコア18156

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問