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

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

ただいまの
回答率

88.81%

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

受付中

回答 8

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 982

maxbet

score 10

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

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

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m6u

    2019/05/23 21:22

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

    キャンセル

  • maxbet

    2019/05/23 21:24

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

    キャンセル

  • m.ts10806

    2019/05/23 21:30

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

    キャンセル

  • maxbet

    2019/05/23 21:31

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

    キャンセル

回答 8

+7

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


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

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


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

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

--

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


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

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


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

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

echo 'heaven'."'".'s door.'  // heaven's door.
echo <<<EOT
heaven's door.
EOT;


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

先の例も

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


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

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


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

実用的に知りたい

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/23 21:30

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

    キャンセル

  • 2019/05/23 21:31

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

    キャンセル

  • 2019/05/23 21:31

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

    キャンセル

  • 2019/05/23 21:33

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

    キャンセル

+2

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

echo 'this value is ' . $value;

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

//ダブルクォーテーション
echo "this value is $value";

//ヒアドキュメント
echo <<<'EOT'
this value is {$value}
EOT;


PHP マニュアル || 文字列

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

自分的には両方NG

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

example

$html = <<__HTML__

<div>
   <a href="http://example.com/${link_path}"
      onclick="alert('OK'); return false">${link_label}</a>
</div>
__HTML__

echo $html;

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-1

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

一つ目の書き方が

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


二つ目の書き方が

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


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る