1. ホーム
  2. php

[解決済み] ベストプラクティス: PHP で複数行の長い文字列を扱うには?

2022-04-16 04:17:03

質問

注:非常に簡単な質問で申し訳ないのですが、私は自分のコードの書式に多少強迫観念があるのです。

あるクラスで、電子メールの本文を構成する文字列を返す関数があります。このテキストは、電子メールで正しく表示されるようにフォーマットして欲しいのですが、私のコードが変な感じにならないようにするためでもあります。以下がその例です。

class Something
{
    public function getEmailText($vars)
    {
        $text = 'Hello ' . $vars->name . ",

The second line starts two lines below.

I also don't want any spaces before the new line, so it's butted up against the left side of the screen.";
        return $text;
    }
}

と書くこともできますが

public function getEmailText($vars)
{
    $text = "Hello {$vars->name},\n\rThe second line starts two lines below.\n\rI also don't want any spaces before the new line, so it's butted up against the left side of the screen.";
    return $text;
}

が、改行とキャリッジリターンはどうなっているのでしょうか?何が違うのでしょうか?は \n\n と同等です。 \r\r または \n\r ? 行間を空ける場合、どちらを使えばいいのでしょうか?

それから、出力バッファリングとheredoc構文というオプションがあります。

オブジェクトの中で長い複数行の文字列を使用する場合、どのように対処していますか?

どのように解決するのですか?

を使用する必要があります。 heredoc または nowdoc .

$var = "some text";
$text = <<<EOT
  Place your text between the EOT. It's
  the delimiter that ends the text
  of your multiline string.
  $var
EOT;

との違いは heredocnowdoc は、PHPコードが heredoc は実行されますが nowdoc はそのまま出力されます。

$var = "foo";
$text = <<<'EOT'
  My $var
EOT;

この場合 $text は値を持つことになります。 "My $var" ではなく "My foo" .

注意事項

  • クロージング前 EOT; にはスペースやタブを入れてはいけません。そうしないと、エラーが発生します。
  • 文字列/タグ ( EOT ) は任意であり、他の文字列、例えば <<<FOOFOO;
  • EOT : 送信終了、EOD : データ終了。 [ Q ]