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

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

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

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

Q&A

解決済

5回答

456閲覧

「<? php ?>」 のルール、使い方がわからないです

urazome

総合スコア26

PHP

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

0グッド

0クリップ

投稿2020/08/19 06:15

前提・実現したいこと

現在phpを勉強中のphp初心者です。実装したい機能があり、調べていたら参考になりそうなコードを見つけました。しかし、今まで勉強してきたphpの記述の仕方と少し違っていて、戸惑っています。

発生している問題・エラーメッセージ

まず、該当のソースコード2行目の「?>」は何ですか?1行目のfunction よりも前に「<? php」の記述がないのにどうしてこれでエラーが出ないのでしょうか?

そして、8行目の「<? php」も同様に、この記述以降に「?>」で閉じている所はありません。なぜこのような使い方ができるのでしょうか?

該当のソースコード

php

1function my_bbp_search_form(){ 2 ?> 3 <div class="bbp-search-form"> 4 5 <?php bbp_get_template_part( 'form', 'search' ); ?> 6 7 </div> 8 <?php 9} 10add_action( 'bbp_template_before_single_forum', 'my_bbp_search_form' ); 11

このソースコードが掛かれているのは、このサイトのStep 1です。https://sevenspark.com/tutorials/how-to-search-a-single-forum-with-bbpress

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

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

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

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

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

guest

回答5

0

そもそも参考先の記事はWordPressのものなので、純粋なPHPというよりWordPressのものとして見た方が良いかと思います。
英文ですがGoogle翻訳で十分理解可能な内容になっているのでコードだけ追わず文章もあわせて見てみてください。幾つかの疑問はそれで解決するかもしれません。


ただ、本当に基本的なところが抜けているように思います。

とりあえずPHPマニュアル読んで
基本的な構文/PHP タグ
基本的な構文/HTML からの脱出
色んなコードを書いて実行して結果を見てみて、
「そんな感じね」で納得しておいた方が良いかと思います。

根本的な仕組みまで知りたいのであればPHPの元ソース(C言語)を読んでいくことになります。(私はPHPマニュアルの内容で十分理解できるのでしっかり読んだことはないです)

あとはせめて、サーバーサイドとクライアントサイドの違い、リクエストとレスポンスについては理解しておいた方が良いです。

投稿2020/08/19 06:30

編集2020/08/19 06:39
m.ts10806

総合スコア80875

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

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

urazome

2020/08/19 08:09

私のレベルが高ければ回答者様の回答で済んだのかもしれませんが、遠回り過ぎて意図が伝わりせんでした。 ただどういうワードで調べればいいのかもわからなかったので、その突破口を示してくださり、ありがとうございました。
m.ts10806

2020/08/19 08:11

>遠回り過ぎて意図が伝わりせんでした。 どこの何の話でしょうか。基本的に直接的な表現しているように思います。
urazome

2020/08/19 08:44

はい、PHPマニュアルのリンクは非常にありがたく、公式でタグを閉じなくていいこともしれました。 ただhtmlに関しては、近すぎて見えなかっただけで、私の応用力がなかったのが問題なのです。phpタグでhtmlタグを囲まないのは当たり前だよなって思って見ていたのですが、そこから今回の「functionの途中でphpタグを閉じているのはなぜ問題」まで思考を追いつかせることができなかったのです。 また、せめて理解しておいた方がいいのところも調べてはみたものの、知識としては何となく理解はしていたもので、今回の件とどうかかわっていいるのか分からず、意図を酌むことができなかったという感じです。なので、私の思考レベルや経験が低かっただけで、わざわざ回答してくださったのに申し訳ないという気持ちなのです。
m.ts10806

2020/08/19 08:49 編集

ちょっと何の話をしているのか分かりません。 それにいちいち自身を卑下する必要はないかと。そのほうがかえって相手の印象を悪くします。 直接的な表現で申し訳ないですが「中身がない内容」です。 誰も謝ってほしいと思ってませんしね。 意図が分からなければどういう意図があるのか聞けば良い話ですし、 コメント内容からおおよその理解度は分かるので、「こんなことも知らないのか」と見下すような人はいませんよ。 ある程度調べているのが前提とはいえ、分からないものは分からないので、 そういう場合は「このページのここを読んだが、自分はここまで理解している。ここがどういうことか分からない」のような旨を記載した方がよっぽど良いアドバイスを得られるのではないでしょうか。 回答者が求めているのはアドバイスを受けてのフィードバックであり、お礼や謝罪ではないことの方が多いです。
urazome

2020/08/19 11:47

承知しました。私の言い方が遠回りになっていしまったのでもう一度伺わせてもらいます。。 サーバーサイドとクライアントサイドの違い、リクエストとレスポンスについて理解しておいた方がよいと言ったのはなぜか、教えていただけませんか? 上記の内容の理解度は、検索して上位に挙がってくるサイトに書かれている内容ぐらいですので、ある程度あるつもりです。 これらの内容が私の質問とどのように関わっているのか分からなかったので、お願いします。
m.ts10806

2020/08/19 21:11

>サーバーサイドとクライアントサイドの違い、リクエストとレスポンスについて理解しておいた方がよいと言ったのはなぜか、教えていただけませんか? 質問内容とコメントから理解しているようには見受けられなかったためです。 理解せずにWebプログラミングはまともにはできないからです。基礎です。
urazome

2020/08/20 05:49

ありがとうございます。頑張ります。
m.ts10806

2020/08/20 10:02

どの程度理解したのかが不明なので、きちんとフィードバックください。 分かっていないままだと同じような質問を繰り返すことになりますし、そのうちそうなると誰も相手しなくなります。 「分かったつもり」の状態が一番危ないです。
guest

0

PHP: PHP タグ - Manual
ドキュメントも読まずになんとなく理解しようとしていませんか?

PHPのコードは

<?php と ?>

の中に書きます。

逆に言うと、
?>

<?php の間はHTMLコードとしてwebブラウザに送信される箇所とも言えます。 **HTMLからPHPへの離脱と復帰**というふうに意識して見ていく必要があります。 しかし、PHPファイルの末尾に「?>」を書かなくてもいいという決まりもあります。

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

投稿2020/08/19 07:27

編集2020/08/19 07:30
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

urazome

2020/08/19 11:57 編集

あーなるほど、そういう見方があったのですね。意識する「もの」がわからないと、本質を理解するまでに中々時間が掛かってしまいます。他の回答者様の回答を見て、いろいろ調べてみたものの、モヤモヤが晴れなかったので、すごくスッキリできました。ちょうど、今の悩みの的を射ていました。 ありがとうございます。
guest

0

php

1function my_bbp_search_form(){ 2 ?> 3 <div class="bbp-search-form"> 4 5 <?php bbp_get_template_part( 'form', 'search' ); ?> 6 7 </div> 8 <?php 9}

これは以下と同じことです。

PHP

1function my_bbp_search_form(){ 2 3 echo '<div class="bbp-search-form">'; 4 5 bbp_get_template_part( 'form', 'search' ); 6 7 echo '</div>'; 8 9}

投稿2020/08/19 06:18

編集2020/08/19 06:27
kyoya0819

総合スコア10429

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

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

urazome

2020/08/19 06:24

なぜですか? echo ってブラウザーに''の中に書かれているものを出力する機能だけではないのですか??
maisumakun

2020/08/19 06:29

> echo ってブラウザーに''の中に書かれているものを出力する機能だけではないのですか?? それは「<?php ... ?>の外側に書かれたもの」も同じ意味です。
kyoya0819

2020/08/19 06:31 編集

PHPのechoは「ブラウザ」に対しては直接の出力を行いません。
urazome

2020/08/19 07:05

開始タグと終了タグについて教えてくれているサイトを見たら、仰っている意味がなんとなく理解できました
guest

0

ベストアンサー

1行目のfunction よりも前に「<? php」の記述がないのにどうしてこれでエラーが出ないのでしょうか?

実際にはどこかに<?phpはありますが、単に省略しているだけです。

8行目の「<? php」も同様に、この記述以降に「?>」で閉じている所はありません。

<?phpは、閉じなくてもかまいません(特に、直接HTMLを出力しないファイルでは、閉じるべきではありません)。

投稿2020/08/19 06:18

編集2020/08/19 06:19
maisumakun

総合スコア146018

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

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

urazome

2020/08/19 06:38

自分のファイルに上記のコードを加える場合、「<? php function my_bbp_search_form{...」というようにfunctionより前に「<? php」を加えればよいのでしょうか? もし閉じなくて、それ以降に「<? php」の記述をしたら、8行目の「<? php」と被ってエラーがでるミスが起こりませんか? 8行目に「<? php」を記述したことに理由はありますか? 9行目「 } 」の後やadd_actionの後に加えなかったのはなぜなのでしょうか。
maisumakun

2020/08/19 06:46

> 自分のファイルに上記のコードを加える場合、「<? php function my_bbp_search_form{...」というようにfunctionより前に「<? php」を加えればよいのでしょうか? そうですね、関数などで構成されるファイルの場合、先頭に<?phpが書いてあると思います。 > もし閉じなくて、それ以降に「<? php」の記述をしたら、 それは単なる記述の誤りです。 > 8行目に「<? php」を記述したことに理由はありますか? 9行目「 } 」の後やadd_actionの後に加えなかったのはなぜなのでしょうか。 9行目は「PHPの出力結果」ではなく、「PHPコード」として解釈すべきものなので、その前に<?phpでPHPへ戻る必要があります。
maisumakun

2020/08/19 06:50

(そもそもの話にはなりますが、この例のような「関数の途中でPHPをいったん閉じる」ようなコードそのものが、あまり好ましい書き方ではないことも間違いないです)
urazome

2020/08/19 08:12 編集

>8行目のタグを閉じるべきでない これは、「ファイル全体での最後のphp開始タグ」は閉じるべきでない、という意味だったのですね。理解できました。 >そもそもの話... ですよね。functionをphp開始タグと終了タグで囲むのが一般的ですよね。今回のようなトリッキーな書き方はまだ怖くて使えないので、基本に忠実にいきたいと思います。
m.ts10806

2020/08/19 07:31 編集

終了タグは書かないのが一般的ですし公的に推奨されています。 maisumakunさんの回答にも別の回答にもあります。 「基本に忠実にいきたい」のでしたらPHPマニュアルを積極活用してください。
urazome

2020/08/19 08:17

マニュアルをどんな時にでも活用できる人間を目指します。今までマニュアル呼んでもよくわからないことが多く、他の人が解説して下さったほうがわかりやすかったので、ないがしろにしていました。
urazome

2020/08/19 08:20

m6uさんの回答を見たら、今回のコードを書いた人の意図がわかった気がします。それを踏まえると、今回のコードは適切だったのか、このようなコードにせざるを得なかったから仕方がないのか...
tanat

2020/08/19 08:34

> それを踏まえると、今回のコードは適切だったのか、このようなコードにせざるを得なかったから仕方がないのか... 2013年の記事なのであんまり言っても仕方ないですが、2020年の基準で言えば「超残念」に分類される様なコードだと思いますよ
m.ts10806

2020/08/19 08:44

ですから私は「WordPressのものとして見た方が良い」と書いているのですけどね。
urazome

2020/08/19 11:51

左様ですか。価値観の一基準として覚えておきます。ありがとうございます
guest

0

まず、該当のソースコード2行目の「?>」は何ですか?1行目のfunction よりも前に「<? php」の記述がないのにどうしてこれでエラーが出ないのでしょうか?

参考元の記事を見る限り、
functions.phpに追記する場合の断片的なコードに見えます。
<?phpfunctions.phpの先頭にある前提ですね。

、この記述以降に「?>」で閉じている所はありません。

については、?>は必要が無い限りは記述しないことが推奨されており、
functions.phpの様な関数定義ファイルでは記述しないことが一般的になっています。

投稿2020/08/19 06:57

tanat

総合スコア18727

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

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

urazome

2020/08/19 08:02

本質的かつ簡潔な回答ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問