PHPの改行を一重引用符で囲む


125

私は可能な限り一重引用符を使用しようとしましたが、\ nを一重引用符で使用できないことに気付きました。Returnキーを押すことで文字どおり改行を入力できることはわかっていますが、コードのインデントがめちゃくちゃになります。

単一引用符を使用しているときに改行を生成する、ASCII文字または何か入力できるものはありますか?


ブラウザーとターミナルの両方で機能するソリューション(cli、コマンドライン)に興味がある場合:stackoverflow.com/a/9665253/1923625
Omar Tariq

正直に言って、すべてのコストで単一引用符を求める理由はまったくありません。どちらの構文にも理由があります。補間変数またはエスケープシーケンスが必要な場合は、意図的に二重引用符を使用することになっています。従うべき良いルールは次のとおりです。正当な理由で二重引用符が必要な場合除き、常に単一引用符を使用してください。それは私の友達の一貫性です。
VictorSchröder

回答:


142

いいえ。一重引用符は16進コードの置換を禁止するためです。

echo 'Hello, world!' . "\xA";

1
あ、そうだね。私はそれに頼る必要がないと思っていた..ありがとう!
Matt

かしこまりました。彼は10分以内にそれに答えました。それまでは待たなければならなかったので、それを忘れてしまいました。
Matt

1
これに代わるものはありますか?私は、私は二重引用符を使用できないことにpreg_replaceでそれを使用する必要があります。
アレックス・ハドレー

1
それは正しい推論ではありません。PHPでは改行文字を単一引用符で表すことができないためです。以上です。マニュアルを読んだ方がよいかもしれません:)
hakre 2013年

3
@hakre確かに、マニュアルを読んだ方が助かったかもしれませんが、ありがたいことに、StackOverflowはこれらの答えを正確に探すのに便利な場所です;)
Frederik Krautwald

108
echo 'hollow world' . PHP_EOL;

定数PHP_EOLを使用すると、OSにも依存しません。


4
通常、PHP_EOLは使用しないでください。これにより、コードが実行されているシステムに依存するようになります。たとえば、Linuxサーバーが別のサーバーと通信していて、サーバーがWindowsに置き換えられた場合など。
Andreas

25

あなたがいる場合はecho、ブラウザにINGのは、使用することができます<br/>あなたの文で:

echo 'Will print a newline<br/>';
echo 'But this wont!';

3
残念ながら、それはターミナルの目的のためのものです。しかし、あなたの応答に感謝します。
Matt

テキストのみのメールでお試しください;)
Kai Noack

22

参考までに、二重引用符なしで改行を文字列に入れることができます。

printf('Please%1$sgive%1$sme%1$snewlines%1$s', PHP_EOL);

二重引用符に対するあなたの不合理な恐怖が限界を知らないなら、それは役に立つかもしれません。私はこの治療法が病気よりも悪いかもしれないと恐れていますが。


それは恐怖ではありません。単一引用符を使用するとパフォーマンスが向上するので、私はそれらを頻繁に使用しないようにします。しかし、これは実際にはこの問題の優れた解決策ではありません。 。ありがとう。
マット

5
私はそれをテストしていませんが、二重引用符を使用する方がprintf一般的に使用したり、文字列連結を使用したりするよりも速いと思います。
ミッコランタライネン2013年

これは常に不合理なわけではありません。二重引用符は、何をしたいかによっては問題になる場合があります。 echo 'For example, I want this to spit out php code.\necho $this->stuff;';
David Baucum 2016年

@DavidBaucum、私はこれが古いスレッドであることを知っていますが、あなた自身とこれに遭遇した他の人のための参照用ですecho "For example, I want this to spit out php code.\necho \$test;";- ご覧のとおり、変数をエスケープして、二重引用符で説明した問題を解決できます。
Josh Wood

9

PHPでシングルVSダブルクォートを使用することには違いがあります

例:1. echo '$var\n'; 2。echo "$var\n";

  • 1では、PHPは文字通り印刷します。 $var\n
  • 2では、PHPはメモリ内の場所を検索し、その場所$varの値を返す必要があります。また、\ nを改行文字として解析し、その結果を出力する必要があります

100万分の1秒の範囲ですが、パフォーマンスに違いがあります。このパフォーマンスの向上を認識できない場合でも、可能な限り単一引用符を使用することをお勧めします。しかし、パフォーマンスに関して言えば、私は偏執的な開発者です。


二重引用符のソリューションAKA The lazy-developer-solutionを使用する代わりに、これを行うための最良の方法を検索しようと試みたことを称賛します。
linuxdev

あなたが望むことをするために私が知っている最善の方法:echo 'foo'、 "\ n";
linuxdev

3
それを行う最も速い方法はecho $var + "\n";
Hengjie 2013年

2
@Hengjie:あなたはおそらく意味しecho $var . "\n";ます。
Skippy le Grand Gourou

@linuxdev:この答えの意味がわかりません。とにかく1の出力は2の出力と同じではないので($var='$var'…と仮定しても)、リンゴとオレンジを比較しませんか?
Skippy le Grand Gourou 2016年

8

一重引用符で使用できる唯一のエスケープシーケンスは、一重引用符自体です。

$foo = 'That\'s great';

単一引用符で作成された文字列に新しい行を挿入できる唯一の方法は、リテラルの改行を挿入することです

$bar = 'That\'s
cheating';

1
それは他の答えと比較して最も簡単な解決策です。
カイノアック2018

5

誰もが関数を使用しての代替を添加していない、なぜ私が疑問に思いますchr()

echo 'Hello World!' . chr(10);

または、100万回繰り返す場合は、より効率的です。

define('C_NewLine', chr(10));
...
echo 'Hello World!' . C_NewLine;

これにより、一重引用符と二重引用符で囲まれた文字列を連結するという、ばかげて見える表記法が回避されます。


1
これは、最もきれいで、糸くずの出にくい、ポータブルなソリューションIMOのようです。
daraul

3

<<<の使用を検討してください

例えば

<<<VARIABLE
this is some
random text
that I'm typing 
here and I will end it with the 
same word I started it with
VARIABLE

詳細:http : //php.net/manual/en/language.types.string.php

ところで-一部のコーディング環境では、上記の構文の処理方法がわかりません。


1
そうです...しかし、最後にVARIABLEがコードのすべてのインデントを解除するという事実はまだ嫌いです... HEREDOC構文を使用して非常に多くの(愚かな)エラーに遭遇しました
Matt

0

いいえ、ドキュメントによれば、PHPは一重引用符で囲まれた特別な記号を認識しません。そして、可能な限り単一引用符を使用する単一の理由はありません


一重引用符を使用すると、パフォーマンスがわずかに向上します。また、いつ変数を置き換えるかを明示的に定義することは良い習慣のようです。
Jackson Miller

4
@Jacksonはパフォーマンスの向上はありません。どうにかして。これらの幼稚な噂を忘れてください。そして、いいえ、変数ではなく、特別なシーケンスについて話します。シーケンス、変数、または改行を展開する場合は、その目的で二重引用符を使用します。そして、OPがその目的でそれを使用することを拒否するのはナンセンスです。
あなたの常識

文字列内の変数を補間する場合に二重引用符を使用しない理由はまったくありません。/n改行のエスケープについても同様です。それは、よりクリーンで読みやすい、簡単だと持っているゼロパフォーマンスの低下を。
VictorSchröder



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.