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

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

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

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

コーディング規約

コーディング規約とは、コードの書き方についての決め事のことです。 文法のことではなく、そのチームなどの中の約束事としてどのような書き方で行うかを定めるもの。 項目の例として、関数や変数の命名規則、コーディングのスタイル、括弧やインデントの書き方などが挙げられます。

Q&A

解決済

6回答

5120閲覧

PHPの<?php ?>はなるべく書いたほうがいいのでしょうか?

makoto-n

総合スコア436

PHP

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

コーディング規約

コーディング規約とは、コードの書き方についての決め事のことです。 文法のことではなく、そのチームなどの中の約束事としてどのような書き方で行うかを定めるもの。 項目の例として、関数や変数の命名規則、コーディングのスタイル、括弧やインデントの書き方などが挙げられます。

1グッド

5クリップ

投稿2020/02/10 05:38

WPをよく作成するのですが、参考にさせていただくテーマやサイトでは

php

1<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 2 <!-- comment --> 3 <?php endwhile; else : ?> 4 <!-- comment --> 5<?php endif; ?>

php

1<?php if ( have_posts() ) : ?> 2 <?php while ( have_posts() ) : ?> 3 <?php the_post(); ?> 4 <p><?php the_title(); ?></p> 5 <?php endwhile; ?> 6<?php endif; ?>

とか書かれています。

<?php ?>で細かくわける利点はなにがありますか?


私としては細かく<?php ?>を書くのは無駄がおおいと感じてしまっていて、

php

1<h3><a href="<?php the_permalink(); ?>"><?php echo get_the_title(); ?></a></h3>

などのような
区切らなければ書きづらい場面だけに書いてます。

if,whileとかは

php

1 <?php if (have_posts()) : 2 while (have_posts()) : the_post(); ?>

と書いています。

細かくわける理由を知りたいですm(_ _)m

yohhoy👍を押しています

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

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

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

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

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

maisumakun

2020/02/10 05:44

最後の「if,whileとかは」のくだりですが、最初の例と改行しか違わないコードになっているのは意図通りでしょうか?
Y.H.

2020/02/10 05:54

ネストの半角空白(またはtab文字?)もですね。
makoto-n

2020/02/10 06:55

一応ネストを表してますww the_post();がそのまま連結してあるのでわかりづらいですよね。。
Y.H.

2020/02/10 07:14

いや、 (※:以下では説明上、半角空白を.に、改行を↲に置き換えています) >..<?php while ( have_posts() ) : ?>↲ >....<?php the_post(); ?>↲ だと、Response Bodyには ..↲ ....↲ を出力しますが >..<?php if (have_posts()) : >....while (have_posts()) : the_post(); ?>↲ だと ..↲ が出力され同じ出力を行うコードではありませんよ。
makoto-n

2020/02/10 07:25

あー、そうですね! たしかに空白が出力されませんね
Y.H.

2020/02/10 07:30

改行コードもね :-)
guest

回答6

0

今回の場合(HTMLにPHPを混ぜる場合)とは別件ですが、PHPのコードだけ書くようなPHPファイルにおいては、最後の?>書くべきではありません。余計な空白が出力されて、トラブルの原因となることがあります。

ファイルが PHP コードのみを含む場合は、ファイルの最後の終了タグは省略するのがおすすめです。 終了タグの後に余分な空白や改行があると、予期せぬ挙動を引き起こす場合があるからです。 余分な空白や改行のせいで PHP が出力バッファリングを開始し、その時点の内容を意図せず出力してしまうことになります。(PHPマニュアルより)

投稿2020/02/10 05:53

maisumakun

総合スコア145183

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

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

makoto-n

2020/02/10 07:03

functions.phpの最後に?>を書かないのには理由があったんですねー!! 追記しやすくするためだと思っていました() ありがとうございます。
enokiyo

2020/02/18 02:56

別件ついでに云うとBOMBなし保存しましょう。
guest

0

<?php ~ ?>って、PHPのコードへの離脱とHTMLへの復帰を意味します。
細かくわける利点は特に無いです。
単に、一行単位で区別したい、区別ができるようにしておきたいだけだと思います。
一行単位でPHPのコードに離脱せず、
まとめていたほうがいいんじゃないかと個人的には思いますが、
別に裏付ける資料などは特に無いです。

コメント文をPHPコード内に書くのか、
それともHTML内に書くのか次第って
例示のコードで思いましたがいかがでしょうか。

ブロック要素とインライン要素の兼ね合いで
HTML上にコメントタグや空白や改行があることでHTMLの構造に影響が出る場合があり、
そういうときには <?php?>を書く位置も気にしたりしますね。
一行単位で離脱すると、改行コードだけHTML側に残ってしまうケースもあったりして。

PHP: PHP タグ - Manual

例えば、

<?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : ?> <?php the_post(); ?> <-----> ...(A) <?php endwhile; ?> <?php else : ?> <-----> ...(B) <?php endif; ?>

インデントに半角空白やTabコードを置くと、アウトプットされるHTMLに紛れ込むんですよ。

<?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : ?> <?php the_post(); ?> <-----> ...(A) <?php endwhile; ?> <?php else : ?> <-----> ...(B) <?php endif; ?>

みたいにしないときれいにならないです。(HTMLへの復帰タグの後ろに空白などを置かない厳守。)
だったら、連続する部分は一つのブロックにしちゃいたくなりますね。

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <-----> ...(A) endwhile; else : ?> <-----> ...(B) <?php endif; ?>

まー、(プロジェクト内の)コーディング規約とか、個人の趣味趣向とかで、お好きに。

投稿2020/02/10 05:45

編集2020/02/10 07:46
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

makoto-n

2020/02/10 07:19

回答ありがとうございます。 > 単に、一行単位で区別したい、区別ができるようにしておきたいだけだと思います。 ほとんど好みになってしまいますね ^^; > 一行単位で離脱すると、改行コードだけHTML側に残ってしまうケースもあったりして。 あー、改行だけのこってしまうのは私も気にしますね。。
退会済みユーザー

退会済みユーザー

2020/02/10 07:27

アウトプットされるHTMLの美しさを優先すると、 ?><div class="~"> みたいに改行コードを置かずにHTMLタグを記述するようなこともします。
kyoya0819

2020/02/18 00:30

> 一行単位でPHPのコードに離脱せず、まとめていたほうがいいんじゃないかと個人的には思いますが、 確か、個々に<?php ?>で書くよりまとめて書く方が処理速度が上がるという記事は見たことあります。(試してはいません
guest

0

ベストアンサー

https://wordpress.stackexchange.com/questions/79938/why-have-php-and-on-every-line

stackexhangeで同じ質問があったのでご紹介しますね。
あまりよくない書き方だという意見が多いように見受けられます。

追記:
すいません、、 よく読むとベストアンサーが否定的な意見を言っているものの、結構意見は分かれてるみたいですね。

投稿2020/02/10 08:02

編集2020/02/10 09:47
kokemomo.sour

総合スコア330

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

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

makoto-n

2020/02/11 21:39

参考サイトまで提示してくださり、ありがとうございます。 うーんん、正当方はないのかもれないですね ^_^;
guest

0

実際に、それを書いた人に聞いてみるのが一番でありますがとりあえず

<>で囲っていると、ブラウザではタグとして扱うので、生のテンプレートなんかをブラウザで見てスタイルを調整する場合は便利かもしれないですね。
古いページなんかは、デザインする人もわざわざ自分の所に環境を構築したりなんかはしなかったからそういう形をとっている事が多いかもしれません。

投稿2020/02/10 05:58

yoorwm

総合スコア1305

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

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

makoto-n

2020/02/10 06:58

> 実際に、それを書いた人に聞いてみるのが一番でありますがとりあえず そうなんですけどね、、
guest

0

コーディングスタイルにもよるのかと。プロジェクトのルールとか。
それだけ様々な書き方ができますからね。
WordPressのコアソースは簡単にしか読んだことないですが新旧様々な書き方がいりまじってるイメージです。

ただ、HTML的な出力のない、クラスやメソッド定義しかないファイルは?>は要らないと思います。

投稿2020/02/10 05:52

m.ts10806

総合スコア80850

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

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

Y.H.

2020/02/10 05:59

> ただ、HTML的な出力のない、クラスやメソッド定義しかないファイルは?>は要らないと思います。 require したものが?>↲ とかなってるとハマりどころですよね。。。 headers already sent by ...
m.ts10806

2020/02/10 06:50

maisumakunさん must beですか。ぜひとも広まってほしいですね。書籍だと「閉じるのが当たり前」で覚えてしまいそうなものが多い印象です。 Y.H.さん headerあるあるですね。 https://www.php.net/manual/ja/function.header.php >頻出するエラーとして、include または require 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります
makoto-n

2020/02/10 07:13

回答ありがとうございます。
guest

0

細かく分けた方が見やすいと感じた人間からの意見です。
(主観が入っている点はご了承ください)

メリットとしては、ネストの深さで処理のグループが分かるという点です。

PHP

1<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 2 <!-- comment --> ...(A) 3 <?php endwhile; else : ?> 4 <!-- comment --> ...(B) 5<?php endif; ?>

このコードでは、(A)のコメントと(B)のコメントが同時に出力されることはありません。
しかしif()endifの間が同じネストで揃っているので、同列の処理として続いているように感じます。

PHP

1<?php if ( have_posts() ) : ?> 2 <?php while ( have_posts() ) : ?> 3 <?php the_post(); ?> 4 <!-- comment --> ...(A) 5 <?php endwhile; ?> 6<?php else : ?> 7 <!-- comment --> ...(B) 8<?php endif; ?>

このように書き換えることで、

ネスト0=if文
ネスト1=while文
ネスト2=while文で繰り返される内容

とネストの深さで処理が分かれるので、例えば1~6行目(if文がTRUE)と6~8行目(if文がFLASE)が別の処理であることが視覚的に分かりやすくなります。

投稿2020/02/10 07:31

編集2020/02/10 07:44
KaedeKazane

総合スコア408

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

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

makoto-n

2020/02/10 07:38

ありがとうございます。 視覚的にわかりやすいから、 数日後に書くときもわかりやすそうですね 保守がしやすそうですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問