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

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

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

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

Q&A

8回答

225閲覧

PHPで「 ${ } 」か「 '. .' 」か?

maxbet

総合スコア10

PHP

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

0グッド

2クリップ

投稿2019/05/23 12:20

編集2019/05/23 12:22

PHPで変数を入れるとき、これらの用途の違いを知りたいです。

どのケースでどちらを使うのでしょうか?

echo "<a href="http://example.com/{$value}">link</a>";

echo '<a href="http://example.com/'.$value.'">link</a>';

「このケースではそっちがわかりやすいよ」とか、
「こういうときはこれはやめた方がいいよ」など、
実用的に知りたいのですが、よくわかりません…。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/05/23 12:22

先の質問 https://teratail.com/questions/190506 に寄せられたアドバイスの意味がわかってない、と捉えますが良いか?
maxbet

2019/05/23 12:24

大丈夫です。ご回答いただけるならどんな捉え方でもいいですよ。
m.ts10806

2019/05/23 12:30

↑「わかってないならなぜ解決済みにしたの?という確認」と認識されたほうが。
maxbet

2019/05/23 12:31

ありがとうございます。そのように認識します。
guest

回答8

0

php

1echo "<a href="http://example.com/{$value}">link</a>";

文法ミスがありますね。
PHP: 文字列 - Manual
をしっかりお読みいただきたい。

php

1echo "<a href=\"http://example.com/${value}\">link</a>";

ダブルクォートが出現した時点で、文字列の終了を意味するので、
文法エラーにならないようバックスラッシュ「\」を加えてエスケープします。

ダブルクォートで括る文字列の中で変数を展開するために
$~という書き方もありますし、${~}という書き方もありますし、もちろん{$~}もあります。
変数名の直後に文字列が続く場合は混乱を避けるために波括弧を駆使します。
{$~}の書き方のほうが、複雑に式を展開しやすいですね。

--

php

1echo '<a href="http://example.com/'.$value.'">link</a>';

文字列と変数と文字列を連結してechoしてますね。
見やすさでいったらこちらの書き方が良いかもしれません。

php

1echo '<a href="http://example.com/' . $value . '">link</a>';

みたいに隙間を設けたりするかも。密集していると見逃してしまいがちだし。

でも、シングルクォートで括った文字列の中でシングルクォートを使いたい場合に困りますよね。

php

1echo 'heaven'."'".'s door.' // heaven's door. 2echo <<<EOT 3heaven's door. 4EOT;

みたいにすることも出来ます。
ヒアドキュメント文字列、ぜひ覚えてください。

先の例も

php

1echo <<<EOT 2<a href="http://example.com/${value}">link</a> 3EOT;

のように書けます。どういうふうに役立つか、

php

1$sql = <<<EOT 2SELECT user_id, user_name, address, email, age 3FROM employees 4WHERE age between {$upper} and {$lower}; 5EOT;

みたいにできます。
SQL文の中でシングルクオートやダブルクォートを使いたくなるので、
いちいちエスケープ記号をつけたり文字列の連結をして読みにくくするよりも、
ヒアドキュメントを使うとこんなにラクです。

投稿2019/05/23 12:36

編集2019/05/23 12:57
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

PHPで「 ${ } 」か「 '. .' 」か?

文法的に許可されており、それほど大きな差異は無いのでどちらでも良いです。
${ }'/"で使用できるできないという大きな差はありますがw
*個人的には、html で"を使用するので、phpでは'を使用し.連結が多いです。(まぁ、好みです)

みやすさは、若干左右されるので、場面で使い分けるのが適切だと思います。
また、${ }を使用して見やすくなるという時は、sprintf()も検討に入れると良いかと。

どのケースでどちらを使うのでしょうか?

質問の例示のケースでは「エスケープを行った」ということを表したいので、. エスケープ処理 .で表現すると思います。

ただし、多少大きなシステムであれば、テンプレートエンジンを採用しているはずなので、全く異なった記法になっている可能性も高いです。

投稿2019/12/21 02:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

実用的に知りたい

何をもって「実用的」とするのかの判断基準を明確にされたほうが良いですが、
実務での扱いを意識したいのであれば、なるべく周囲、またはプロジェクトのルールに合わせてください。
出力結果は同じであることが分かっているわけですよね。

「適宜利用してください(コーディングスタイルが散らばらないように)」くらいでしょうか。

それよりPHPマニュアルきちんと確認する習慣をつけるほうが何倍も大事です。

投稿2019/05/23 12:29

m.ts10806

総合スコア80850

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

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

maxbet

2019/05/23 12:30

ありがとうございます。適宜利用したいと思います。
m.ts10806

2019/05/23 12:31

回答をきちんと理解してから解決済みにしてください。 不明点あるなら回答にコメントで追加確認して明確にして「解決」するようにしてくださいね。
maxbet

2019/05/23 12:31

わかりました。ありがとうございます。
m.ts10806

2019/05/23 12:33

今一つどのような回答もコメントも伝わっていない感じがするのですけど。
guest

0

自分的には両方NG

引用符の影響がでるので読みづらい

example

php

1$html = <<__HTML__ 2 3<div> 4 <a href="http://example.com/${link_path}" 5 onclick="alert('OK'); return false">${link_label}</a> 6</div> 7__HTML__ 8 9echo $html;

投稿2019/12/21 02:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

どちらでも書ける場合、シンプルには前者ですが、方法をどちらかに標準化して統一するということになると、後者です。
前者に比べると、後者には、
・文字列を囲む引用符をどちらも使える
・変数参照だけでなくて、関数呼び出しなど任意の式が書ける
というメリットがあります。
前者のメリットは、シンプルというだけだと思います。

個人での開発など、統一する必要がない場合は、ケースバイケースでいいかと。

文字列を引用符で囲むのでなく、ヒアドキュメントを使う場合は、前者のような方法になります。

投稿2019/12/21 01:20

otn

総合スコア84555

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

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

0

シングルクォーテーションの場合は、こちらを使います。

php

1echo 'this value is ' . $value;

ダブルクォーテーションで括られるか、ヒアドキュメントで指定された場合、 その中の変数はパースされます。

php

1//ダブルクォーテーション 2echo "this value is $value"; 3 4//ヒアドキュメント 5echo <<<'EOT' 6this value is {$value} 7EOT;

PHP マニュアル || 文字列

投稿2019/06/10 09:08

hide0128

総合スコア245

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

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

0

大雑把に言って、書く人の好みによるんじゃないかなあ。
チームで開発する際のコーディング規約があれば
そちらに従うべき話ではありますね。
あと、IDE によってはどちらかの方が便利かもしれません。

ちなみに自分の好みは後者です。
また、長い文字列を書く場合にはこんな感じで

php

1echo '<a href="http://example.com/' 2 . $value 3 . '">link</a>';

投稿2019/05/23 13:57

takasima20

総合スコア7458

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

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

0

経験によると思いますが、拙い経験から判断すると二つ目がいいですね。

一つ目の書き方が

Japanese

1中島「磯野野球しようぜー!」 2磯野「いけたらいくわー、現地で待っとってー」

二つ目の書き方が

Japanese

1中島「磯野野球しようぜー!」 2磯野「わかったいくわ」

プログラム作る上では二つ目の磯野が良いので二つ目で書くのがいいでしょう。

投稿2019/05/23 13:33

hentaiman

総合スコア6421

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問