LoginSignup
2
1

More than 3 years have passed since last update.

PHPの長文テキストを書く時はどれでやる?>>>連結 or Enter改行 or ヒアドキュメント?

Last updated at Posted at 2018-10-03

結論

一般的なWebサービスの運用環境においてはパフォーマンス上の差は起こりません。
つまり、好みや書きやすさだけで判断して差支ありません。

※この記事を読んだ後に、頂いたコメントを読むことをおすすめします。

余談
ちなみに私はSQLを書く場合などに最も多く使うのですが、SQlをlogに保存する時に空白や改行も保存されてしまうのが嫌なので文字列連結で書くと事にしました。また、処理速度の違いにおいては体感的に殆ど変わらないので考えるだけ無駄だと言う結論に至ります。

この記事は、私が疑問を持ち自分なりの結論を出すために行った稚拙なテストを残すために残して置くとします。

長文テキストの可読性と処理速度の両立

長文テキストを書く時にダラダラと横に書きたくはありませんよね。
そこで多く見かけるのが.で文字列連結をして見やすくする方法です。

$text = 'SQLを書く時なんかは'
    .'長くならないために'
    .'よく改行しますよね!';

しかし、処理速度を遅くしたくは無い!!
と言うことで実験しまーす。

文字列連結

$st = microtime(true);
$text1 = "文字列を"
    ."連結すると"
    ."どうなるんだろうね。"
;
$now = microtime(true);
$time = $now -$st;
echo '処理1の時間:'.(sprintf('%8f', $time))."秒\n";

結果→ 処理1の時間:0.000009秒

当たり前といえば当たり前ですが文字列連結の処理のせいで今回の検証で一番遅いです。
そして、文字列連結の数が多ければ多いほど更に遅くなるデメリットがあります!
※簡単なのでこの書き方の人は意外と多い…(僕は多用したくない)

Enter改行

$st = microtime(true);
$text2 = "
    文字列を
    連結すると
    どうなるんだろうね。
";
$now = microtime(true);
$time = $now -$st;
echo '処理2の時間:'.(sprintf('%8f', $time))."秒\n";

結果→ 処理2の時間:0.000002秒

文字列連結に比べてかなり早くなりました。
僕はこの書き方をよく使っているんです。
デメリットとしては、Enter改行を無視してくれないパターンの時が以外と多いこと!

ヒアドキュメント

$st = microtime(true);
$text3 = <<<EOD
文字列を
連結すると
どうなるんだろうね。

EOD;
$now = microtime(true);
$time = $now -$st;
echo '処理3の時間:'.(sprintf('%8f', $time))."秒\n";

結果→ 処理3の時間:0.000001秒

おお、早いっすね!
ヒアドキュメントは終了タグ周辺で改行が必要だったり
終了タグ前後で文字列を入れるとエラーになるところを無視すればとても優秀です!
※エラーの記述に関しては、phpのバージョンによっては異なる。

テンプレートファイルを作成する

これは今回の様な例には不向きかも知れませんが、変数などを使ってテキストの内容を状況に応じて変更する事ができるのでいいと思います!
ちなみに僕の場合はAPIでXMLを作成する場合などでしか使った事がありません。

2
1
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1