พิมพ์ขึ้นบรรทัดใหม่ใน PHP ในเครื่องหมายคำพูดเดียว


126

ฉันพยายามใช้เครื่องหมายคำพูดเดี่ยวให้มากที่สุดและสังเกตว่าฉันไม่สามารถใช้ \ n ในเครื่องหมายคำพูดเดี่ยวได้ ฉันรู้ว่าฉันสามารถขึ้นบรรทัดใหม่ได้โดยการกด return แต่มันจะทำให้การเยื้องของรหัสของฉันเป็นไปอย่างรวดเร็ว

มีอักขระ ASCII หรือสิ่งที่ฉันสามารถพิมพ์ที่จะสร้างบรรทัดใหม่เมื่อฉันใช้เครื่องหมายคำพูดเดี่ยวหรือไม่?


หากใครสนใจโซลูชันที่ใช้งานได้ทั้งเบราว์เซอร์และเทอร์มินัล (cli, command line): stackoverflow.com/a/9665253/1923625
Omar Tariq

มีความซื่อสัตย์สุจริตไม่มีเหตุผลที่ทุกคนที่จะแสวงหาคำพูดเดียวที่ค่าใช้จ่ายทั้งหมด ไวยากรณ์ทั้งสองให้เหตุผล หากคุณต้องการตัวแปรหยันหรือลำดับหนีคุณควรจะใช้คำพูดสองจงใจ กฎที่ดีที่จะปฏิบัติตามคือมักจะใช้ราคาเดียวเว้นแต่คุณต้องการคำพูดคู่ด้วยเหตุผลที่ดี นั่นคือความสม่ำเสมอของเพื่อน ๆ
Victor Schröder

คำตอบ:


143

ไม่เพราะเครื่องหมายคำพูดเดี่ยวจะยับยั้งการเปลี่ยนรหัสฐานสิบหก

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

ครับท่าน. เขาตอบคำถามภายใน 10 นาที ต้องรอถึงตอนนั้นกว่าจะยอมรับแล้วก็ลืมไปเลยฮ่า ๆ
Matt

1
มีทางเลือกอื่นไหม ฉันจำเป็นต้องใช้ใน preg_replace ที่ฉันไม่สามารถใช้เครื่องหมายคำพูดคู่ได้
Alex Hadley

1
นั่นไม่ใช่เหตุผลที่ถูกต้อง ไม่ใช่เพราะใน PHP คุณไม่สามารถแสดงอักขระขึ้นบรรทัดใหม่ในเครื่องหมายคำพูดเดี่ยวได้ และนั่นแหล่ะ การอ่านคู่มืออาจช่วยได้ :)
hakre

3
@hakre แน่นอนว่าการอ่านคู่มืออาจช่วยได้ แต่โชคดีที่ StackOverflow เป็นสถานที่สำหรับค้นหาคำตอบเหล่านี้อย่างสะดวกสบาย;)
Frederik Krautwald

โดยปกติฉันต้องแก้ไขตัวเองด้วย singlequotes คุณสามารถป้อน chr (10) หรือ chr (13) หรือรวมกันได้โดยพิมพ์ตรงตามนั้นอาจไม่สามารถอ่านได้แม้ว่า ... :)
hakre

109
echo 'hollow world' . PHP_EOL;

ใช้ PHP_EOL ค่าคงที่ดังนั้นจึงเป็นระบบปฏิบัติการที่ไม่ขึ้นกับระบบด้วย


4
โดยปกติคุณไม่ควรใช้ PHP_EOL เนื่องจากโค้ดของคุณจะขึ้นอยู่กับระบบที่ทำงานอยู่ เช่นเซิร์ฟเวอร์ Linux ของคุณกำลังสื่อสารกับเซิร์ฟเวอร์อื่นแล้วเซิร์ฟเวอร์ของคุณถูกแทนที่ด้วย Windows ... ไม่ดี
Andreas

25

หากคุณechoใช้เบราว์เซอร์คุณสามารถใช้<br/>กับคำสั่งของคุณ:

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

3
น่าเสียดายที่มันมีมากกว่าสำหรับวัตถุประสงค์ของเทอร์มินัล .. ขอบคุณสำหรับการตอบกลับของคุณ
Matt

ลองใช้อีเมลแบบข้อความเท่านั้น;)
Kai Noack

22

FYI เป็นไปได้ที่จะขึ้นบรรทัดใหม่เป็นสตริงโดยไม่มีเครื่องหมายคำพูดคู่:

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

ซึ่งอาจเป็นประโยชน์หากความกลัวที่ไม่มีเหตุผลของคุณเกี่ยวกับเครื่องหมายคำพูดคู่จะไม่มีขอบเขต แม้ว่าฉันจะกลัวว่าการรักษานี้อาจเลวร้ายยิ่งกว่าโรค


ไม่ใช่ความกลัว .. คุณแค่ได้รับประสิทธิภาพที่ดีขึ้นเมื่อคุณใช้เครื่องหมายคำพูดเดี่ยวดังนั้นฉันจึงพยายามใช้บ่อยขึ้นไม่ใช่หรือ .. แต่ใช่นี่ไม่ใช่วิธีแก้ปัญหาที่ดีเยี่ยมสำหรับปัญหานี้ปัญหามากกว่ามูลค่า . ขอบคุณ
แมตต์

5
ฉันยังไม่ได้ทดสอบ แต่ฉันจะเดิมพันได้ว่าการใช้เครื่องหมายคำพูดคู่นั้นเร็วกว่าการใช้printfหรือการรวมสายโดยทั่วไป
Mikko Rantalainen

ไม่ใช่เรื่องไร้เหตุผลเสมอไปเครื่องหมายอัญประกาศคู่อาจเป็นปัญหาได้ทั้งนี้ขึ้นอยู่กับสิ่งที่คุณต้องการทำ echo 'For example, I want this to spit out php code.\necho $this->stuff;';
David Baucum

@DavidBaucum ฉันรู้ว่านี่เป็นกระทู้เก่า แต่เพียงเพื่อการอ้างอิงสำหรับตัวคุณเองและคนอื่น ๆ ที่สะดุดในเรื่องนี้echo "For example, I want this to spit out php code.\necho \$test;";อย่างที่คุณเห็นคุณสามารถหลีกเลี่ยงตัวแปรซึ่งช่วยแก้ปัญหาที่คุณอธิบายด้วยเครื่องหมายอัญประกาศคู่
Josh Wood

9

ลำดับ Escape เดียวที่คุณสามารถใช้ในเครื่องหมายคำพูดเดี่ยวมีไว้สำหรับเครื่องหมายคำพูดเดี่ยว

$foo = 'That\'s great';

วิธีเดียวที่คุณสามารถแทรกบรรทัดใหม่ลงในสตริงที่สร้างด้วยเครื่องหมายคำพูดเดี่ยวคือการแทรกบรรทัดใหม่ตามตัวอักษร

$bar = 'That\'s
cheating';

1
เมื่อเทียบกับคำตอบอื่น ๆ เป็นทางออกที่ง่ายที่สุด
Kai Noack

9

มีความแตกต่างในการใช้อัญประกาศคู่ VS เดี่ยวใน PHP

เช่น 1. echo '$var\n'; 2.echo "$var\n";

  • ใน 1 PHP จะพิมพ์ตามตัวอักษร: $var\n
  • ใน 2 PHP จะต้องค้นหาตำแหน่งในหน่วยความจำสำหรับ$varและส่งคืนค่าในตำแหน่งนั้นและจะต้องแยกวิเคราะห์ \ n เป็นอักขระบรรทัดใหม่และพิมพ์ผลลัพธ์นั้น

เราอยู่ในช่วงหนึ่งในล้านวินาที แต่มีความแตกต่างในด้านประสิทธิภาพ ฉันขอแนะนำให้คุณใช้เครื่องหมายคำพูดเดี่ยวทุกครั้งที่เป็นไปได้แม้ว่าคุณจะไม่สามารถรับรู้ถึงประสิทธิภาพที่เพิ่มขึ้น แต่ฉันเป็นนักพัฒนาที่หวาดระแวงเมื่อพูดถึงประสิทธิภาพ


ขอปรบมือให้คุณที่พยายามค้นหาวิธีที่ดีที่สุดในการทำสิ่งนี้แทนการใช้โซลูชันคำพูดคู่ AKA The lazy-developer-solution
linuxdev

วิธีที่ดีที่สุดที่ฉันรู้ว่าทำในสิ่งที่คุณต้องการ: echo 'foo', "\ n";
linuxdev

3
วิธีที่รวดเร็วในการทำคือecho $var + "\n";
Hengjie

2
@Hengjie: echo $var . "\n";คุณอาจหมายถึง
Skippy le Grand Gourou

@linuxdev: ฉันไม่เห็นประเด็นของคำตอบนี้ เนื่องจากผลลัพธ์ของ 1 ไม่เหมือนกับผลลัพธ์ของ 2 อยู่ดี (แม้จะสมมติว่า$var='$var'... ) คุณไม่ได้เปรียบเทียบแอปเปิ้ลกับส้มหรือ?
Skippy le Grand Gourou

5

ฉันสงสัยว่าทำไมไม่มีใครเพิ่มทางเลือกในการใช้ฟังก์ชันchr():

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

หรือมีประสิทธิภาพมากขึ้นหากคุณจะทำซ้ำเป็นล้านครั้ง:

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/th/language.types.string.php

Btw - สภาพแวดล้อมการเข้ารหัสบางอย่างไม่ทราบวิธีจัดการกับไวยากรณ์ข้างต้น


1
อ่าใช่ ... แต่ฉันยังคงเกลียดความจริงที่ว่าตัวแปรในตอนท้ายแบ่งการเยื้องทั้งหมดในโค้ดของคุณ ... ฉันพบข้อผิดพลาด (โง่ ๆ ) มากมายโดยใช้ไวยากรณ์ของ HEREDOC
แมตต์

0

ไม่ตามเอกสารประกอบ PHP ไม่รู้จักสัญลักษณ์พิเศษในเครื่องหมายคำพูดเดี่ยว และไม่มีเหตุผลเดียวที่จะใช้เครื่องหมายคำพูดเดียวให้มากที่สุด


การใช้เครื่องหมายคำพูดเดี่ยวมีประสิทธิภาพเพิ่มขึ้นเล็กน้อย นอกจากนี้ดูเหมือนเป็นแนวทางปฏิบัติที่ดีในการกำหนดอย่างชัดเจนเมื่อคุณต้องการให้ตัวแปรถูกแทนที่
Jackson Miller

4
@Jackson ไม่มีการเพิ่มประสิทธิภาพ ด้วยวิธีการใด ๆ ลืมข่าวลือเด็ก ๆ เหล่านี้ และไม่อย่าพูดถึงตัวแปร แต่เป็นลำดับพิเศษ หากคุณต้องการลำดับใด ๆ ตัวแปรหรือขึ้นบรรทัดใหม่ที่จะขยายตัว - ใช้คำพูดคู่กับวัตถุประสงค์ของมัน และการที่ OP ปฏิเสธที่จะใช้มันโดยมีวัตถุประสงค์เป็นเรื่องไร้สาระ
สามัญสำนึกของคุณ

ไม่มีเหตุผลที่จะไม่ใช้เครื่องหมายคำพูดคู่เมื่อคุณต้องการแก้ไขตัวแปรภายในสตริง เช่นเดียวกันกับค่า Escape /nสำหรับตัวแบ่งบรรทัด ง่ายกว่าสะอาดกว่าอ่านง่ายกว่าและไม่มีโทษประสิทธิภาพ
Victor Schröder



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.