In dòng mới bằng PHP trong dấu ngoặc đơn


125

Tôi cố gắng sử dụng các trích dẫn càng nhiều càng tốt và tôi nhận thấy rằng tôi không thể sử dụng \ n trong các trích dẫn đơn. Tôi biết tôi chỉ có thể nhập một dòng mới theo nghĩa đen bằng cách nhấn return, nhưng điều đó làm tăng sự thụt vào mã của tôi.

Có một số ký tự ASCII hoặc thứ gì đó mà tôi có thể nhập sẽ tạo ra dòng mới khi tôi đang sử dụng các trích dẫn đơn không?


Nếu bất cứ ai quan tâm đến một giải pháp hoạt động cho cả trình duyệt và thiết bị đầu cuối (cli, dòng lệnh): stackoverflow.com/a/9665253/1923625
Omar Tariq

Thành thật mà nói không có lý do nào để tìm kiếm trích dẫn bằng mọi giá . Cả hai cú pháp phục vụ cho một lý do. Nếu bạn muốn các biến được nội suy hoặc các chuỗi thoát, bạn phải sử dụng dấu ngoặc kép có chủ ý . Một nguyên tắc tốt để tuân theo là: luôn luôn sử dụng dấu ngoặc đơn, trừ khi bạn muốn dấu ngoặc kép vì một lý do chính đáng . Đó là sự nhất quán các bạn của tôi.
Victor Schröder

Câu trả lời:


142

Không, bởi vì dấu ngoặc đơn thậm chí ức chế thay thế mã hex.

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

1
À ok .. Tôi đã hy vọng tôi sẽ không phải dùng đến điều đó .. Cảm ơn!
Matt

Vâng thưa ngài. Anh trả lời nó dưới 10 phút. Tôi phải đợi đến lúc đó mới chấp nhận, rồi tôi quên mất chuyện đó haha.
Matt

1
Có bất kỳ thay thế cho điều này? Tôi cần sử dụng nó trong một preg numplace mà tôi không thể sử dụng dấu ngoặc kép trong.
Alex Hadley

1
Đó không phải là lý do đúng. Không phải vì trong PHP bạn không thể diễn tả một ký tự dòng mới trong các dấu ngoặc đơn. Và đó là nó. Đọc hướng dẫn có thể có ích :)
hakre

3
@hakre Chắc chắn, đọc hướng dẫn có thể có ích, nhưng may mắn thay, StackOverflow là nơi để thuận tiện tìm kiếm chính xác những câu trả lời này;)
Frederik Krautwald

108
echo 'hollow world' . PHP_EOL;

Sử dụng hằng số PHP_EOL thì nó cũng độc lập với hệ điều hành.


4
Bạn thường không nên sử dụng PHP_EOL vì điều này làm cho mã của bạn phụ thuộc vào hệ thống mà nó đang chạy. Ví dụ: máy chủ Linux của bạn đang liên lạc với một máy chủ khác và sau đó máy chủ của bạn sẽ được thay thế bởi Windows ... Không tốt.
Andreas

25

Nếu bạn đang echosử dụng trình duyệt, bạn có thể sử dụng <br/>với tuyên bố của mình:

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

3
Thật không may, nó nhiều hơn cho mục đích thiết bị đầu cuối .. cảm ơn phản hồi của bạn mặc dù.
Matt

Hãy thử điều này trong một email chỉ có văn bản;)
Kai Noack

22

FYI có thể nhận được các dòng mới thành chuỗi mà không cần trích dẫn kép:

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

Điều này có thể hữu ích Nếu nỗi sợ phi lý của bạn về dấu ngoặc kép không biết giới hạn. Mặc dù tôi sợ phương pháp chữa trị này có thể tồi tệ hơn căn bệnh này.


Đó không phải là một nỗi sợ hãi .. bạn chỉ có được hiệu suất tốt hơn khi bạn sử dụng các trích dẫn đơn lẻ, vì vậy tôi cố gắng sử dụng chúng thường xuyên hơn sau đó không .. nhưng yah, đây thực sự không phải là một giải pháp tuyệt vời cho vấn đề này, nó rắc rối hơn giá trị của nó . Cảm ơn.
Matt

5
Tôi chưa thử nghiệm nhưng tôi cá rằng việc sử dụng dấu ngoặc kép nhanh hơn so với sử dụng printfhoặc chuỗi catenation nói chung.
Mikko Rantalainen

Không phải lúc nào cũng không hợp lý, trích dẫn kép có thể có vấn đề, tùy thuộc vào những gì bạn muốn làm. echo 'For example, I want this to spit out php code.\necho $this->stuff;';
David Baucum

@DavidBaucum, tôi biết đây là một chủ đề cũ nhưng chỉ để tham khảo cho chính bạn và bất kỳ ai khác vấp phải điều này, echo "For example, I want this to spit out php code.\necho \$test;";- như bạn có thể thấy bạn có thể thoát các biến, giải quyết vấn đề bạn mô tả bằng dấu ngoặc kép.
Josh Wood

9

Có một sự khác biệt trong việc sử dụng dấu ngoặc kép VS đơn trong PHP

ví dụ: 1. echo '$var\n'; 2.echo "$var\n";

  • trong 1, PHP sẽ in theo nghĩa đen: $var\n
  • trong 2, PHP sẽ phải tìm kiếm vị trí trong bộ nhớ $varvà trả về giá trị ở vị trí đó, đồng thời, nó sẽ phải phân tích \ n dưới dạng ký tự dòng mới và in kết quả đó

Chúng ta đang ở trong phạm vi một phần triệu giây, nhưng có sự khác biệt về hiệu suất. Tôi sẽ khuyên bạn nên sử dụng các trích dẫn đơn bất cứ khi nào có thể, ngay cả khi biết rằng bạn sẽ không thể nhận thấy sự gia tăng hiệu suất này. Nhưng tôi là một nhà phát triển hoang tưởng khi nói đến hiệu suất.


Tôi hoan nghênh bạn đã cố gắng tìm kiếm cách tốt nhất để làm điều này thay vì sử dụng giải pháp báo giá kép AKA Giải pháp lười biếng cho nhà phát triển.
linuxdev

Cách tốt nhất tôi biết để làm những gì bạn muốn: echo 'foo', "\ n";
linuxdev

3
Cách nhanh nhất để làm điều đó làecho $var + "\n";
Hengjie

2
@Hengjie: Có lẽ bạn có nghĩa là echo $var . "\n";.
Skippy le Grand Gourou

@linuxdev: Tôi không thấy điểm của câu trả lời này. Vì đầu ra của 1 không giống với đầu ra của 2 dù sao (thậm chí giả sử là $var='$var'), nên bạn không so sánh táo với cam?
Skippy le Grand Gourou

8

Trình tự thoát duy nhất bạn có thể sử dụng trong dấu ngoặc đơn là cho chính trích dẫn đó.

$foo = 'That\'s great';

Cách duy nhất bạn có thể chèn một dòng mới vào một chuỗi được tạo bằng các dấu ngoặc đơn là chèn một dòng mới theo nghĩa đen

$bar = 'That\'s
cheating';

1
Đó là so với các câu trả lời khác giải pháp dễ nhất.
Kai Noack

5

Tôi tự hỏi tại sao không ai thêm phương án sử dụng chức năng chr():

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

hoặc, hiệu quả hơn nếu bạn sẽ lặp lại nó một triệu lần:

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

Điều này tránh được ký hiệu trông ngớ ngẩn khi nối một chuỗi trích dẫn đơn và kép.


1
Đây có vẻ như là giải pháp IMO đẹp nhất, thân thiện nhất, thân thiện nhất.
daraul

3

Bạn có thể muốn xem xét sử dụng <<<

ví dụ

<<<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

Thêm thông tin tại: http://php.net/manual/en/lingu.types.opes.php

Btw - Một số môi trường mã hóa không biết cách xử lý cú pháp trên.


1
À đúng rồi ... nhưng tôi vẫn ghét sự thật rằng VARIABLE ở cuối phá vỡ mọi vết lõm trong mã của bạn ... Tôi đã gặp rất nhiều lỗi (ngu ngốc) khi sử dụng cú pháp HEREDOC
Matt

0

Không, theo tài liệu , PHP nhận ra không có ký hiệu đặc biệt trong các trích dẫn đơn. không có lý do duy nhất để sử dụng dấu ngoặc đơn càng nhiều càng tốt


Có một sự gia tăng hiệu suất nhẹ để sử dụng dấu ngoặc đơn. Ngoài ra, có vẻ như một thực tiễn tốt để xác định rõ ràng khi bạn muốn thay thế các biến.
Jackson Miller

4
@Jackson không có hiệu suất tăng. Bằng mọi cách. Hãy quên đi những tin đồn trẻ con. Và không, không nói về các biến, mà là các chuỗi đặc biệt. Nếu bạn muốn bất kỳ chuỗi, một biến hoặc một dòng mới sẽ được mở rộng - sử dụng dấu ngoặc kép, theo mục đích của nó . Và OP từ chối sử dụng nó cho mục đích của nó là vô nghĩa.
Ý thức chung của bạn

Hoàn toàn không có lý do để không sử dụng dấu ngoặc kép khi bạn muốn nội suy một biến trong chuỗi. Tương tự với một /nlối thoát cho ngắt dòng. Nó dễ dàng hơn, sạch hơn, dễ đọc hơn và không bị phạt hiệu suất.
Victor Schröder

0

trong trường hợp bạn có một biến:

$your_var = 'declare your var';
echo 'i want to show my var here'.$your_var.'<br>';


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.