2010-07-23 42 views
19

Là nó tốt hơn để nối một biến (chẳng hạn, $name) thành một chuỗi hiện có (chẳng hạn, $string) như thế này:Dấu nháy đơn hoặc dấu ngoặc kép cho phép nối biến đổi?

$string='Hi, my name is '.$name 

hoặc nhúng biến trong chuỗi như thế này:

$string="Hi, my name is $name"; 

hoặc tốt hơn là sử dụng một chức năng như sau:

$string=sprintf("Hi, my name is %s",$name); 

Điều nào tốt hơn về thời gian/hiệu quả của bộ xử lý ?

+0

Tôi sẽ nói rằng, nó phụ thuộc vào nơi dữ liệu đến từ ... đầu vào của người dùng hoặc đầu vào hệ thống – Prix

+0

Có sự khác biệt về hiệu suất không? tức là, thời gian xử lý nhiều hơn với mỗi? – ina

+1

có thể trùng lặp của [PHP - "Sal's mall là $ emo" vs "Sal's mall is". $ Emo - chuỗi với báo giá kết nối hiệu quả] (http://stackoverflow.com/questions/3394166/php-sals-mall-is -emo-vs-sals-mall-là-emo-string-với-dấu ngoặc kép-concaten) –

Trả lời

25

Tất cả mọi người đã làm bài kiểm tra kết luận rằng việc sử dụng dấu nháy đơn là hiệu suất tốt hơn một cách khôn ngoan. Trong dấu ngoặc kép kết thúc chỉ trong một kết nối trong khi dấu ngoặc kép buộc các thông dịch viên để phân tích chuỗi hoàn chỉnh cho các biến.

Tuy nhiên, tải bổ sung khi làm điều đó quá nhỏ đối với các phiên bản PHP gần đây, phần lớn thời gian kết luận là nó không thực sự quan trọng.

Vì vậy, đối với những người thực hiện: hãy sử dụng dấu nháy đơn. Đối với những người "tôi thích mã của tôi có thể đọc được": dấu ngoặc kép tốt hơn rất nhiều cho tính dễ đọc, như Flavius ​​Stef đã chỉ ra.

Chỉnh sửa: Một điều mặc dù - Nếu bạn định sử dụng một đô la duy nhất trong chuỗi của mình mà không có biến, hãy sử dụng dấu nháy đơn để chắc chắn! (http://www.weberdev.com/get_example-3750.html chỉ ra rằng nó sẽ mất 4 lần thời gian để phân tích những chuỗi)

+7

"mọi nguồn dữ liệu thử nghiệm ..."? – ina

+1

http://classyllama.com/development/php/php-single-vs-double-quotes/ http://www.procata.com/blog/archives/2005/03/08/microbenchmarks-of-single- và-double-qouting/ Đây là 2. google có thể cung cấp cho bạn nhiều hơn nữa. – Blizz

+0

Tôi nghĩ rằng thử nghiệm thậm chí không cần thiết. Nó chỉ là vấn đề số lượng hướng dẫn xử lý. Bạn càng ít (có thể dễ dàng đoán được trong trường hợp này), bạn càng nhanh. – snowflake

0

Nó không quan trọng từ phối cảnh cú pháp. Cả hai biến thể đều chính xác. Sử dụng những gì bạn cảm thấy thoải mái hơn.

Cá nhân, tôi cảm thấy tốt hơn khi sử dụng $string="Hi, my name is $name", bởi vì bạn không cần phải gây nhầm lẫn với dấu ngoặc kép. Chỉ cần hình ảnh truy vấn SQL phức tạp, giả sử, 10 biến ...

7

Tôi thường cảm thấy rằng việc sử dụng phép nội suy chuỗi ("Hi, my name is $name") là tốt hơn từ quan điểm dễ đọc.

0

PHP là khá chậm:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-088-introduction-to-c-memory-management-and-c-object-oriented-programming-january-iap-2010/lecture-notes/MIT6_088IAP10_lec01.pdf

Trượt # 3

Vì vậy, đừng lo lắng quá nhiều chuyện của cậu bé tối ưu hóa như thế này.

Tập trung nhiều hơn vào việc sử dụng APC để lưu mã của bạn vào mã byte mặc dù. Bạn sẽ thấy tăng tốc độ lớn cho dự án.

-5
$string='Hi, my name is '.$name 

Đây là cách tốt nhất, theo nghĩa kết hợp giữa php và html!

hay như thế này:

$string="Hi, my name is $name"; 

Đây là cách cũ!

Hoặc như thế này:

$string=sprintf("Hi, my name is %s",$name); 

Đây là những gì một lập trình viên đến từ ngôn ngữ khách hàng Lập trình Visual Basic hoặc khác sẽ viết!

Tôi hy vọng tôi hữu ích.

+1

Tôi không đồng ý rằng '" Xin chào, tên tôi là $ name "' là "cũ", và rằng '' Xin chào, tên tôi là '. $ Name' bằng cách nào đó tốt hơn! – Josh

0

Cá nhân, nếu nó chỉ là một biến bình thường, hoặc thậm chí một tài sản lớp, tôi muốn viết nó như thế này:

$newVarA = "This is some text with a $variable"; 
$newVarB = "This is some more text, written in $settings->language"; 

Tuy nhiên, nếu tôi sử dụng giá trị mảng sau đó tôi sẽ nối với single báo giá.

$newVarC = 'This is some text from a ' . $text['random'] . ' array'; 

Hy vọng điều này có ý nghĩa. Đó là tất cả về việc tìm kiếm quy ước và gắn bó với nó.

+0

Ví dụ mảng của bạn hoạt động tốt mà không cần ghép nối. '... từ mảng {$ text ['random']}' hoặc '... từ mảng $ text [random]. Bạn chỉ muốn * có * để sử dụng phương thức {} nếu bạn đang tham chiếu mảng đa chiều, vì trình phân tích cú pháp của PHP không tham lam. '$ array [x] [y]' sẽ được phân tách thành ''. –

+0

Có. Nhưng tôi thấy việc sử dụng niềng răng trong dây chỉ hơi xấu xí với tôi. Như tôi đã nói, nó chỉ là một ví dụ về cách cá nhân tôi nối các chuỗi với các biến. –

11

Sự khác biệt giữa dấu nháy đơn và kép trong PHP là dấu ngoặc kép là "thông minh" ở chỗ chúng sẽ phân tích cú pháp cho các biến khi được đọc, trong khi dấu nháy đơn "câm" và sẽ không cố gắng phân tích cú pháp bất kỳ ký tự nào trong chuỗi .

Điều này dẫn đến một số khác biệt nhỏ về những ký tự bạn có thể sử dụng; về cơ bản, nhân vật duy nhất bạn cần phải thoát khỏi khi sử dụng dấu nháy đơn là một dấu nháy đơn thân:

'\'' 

Trong khi nếu bạn sử dụng dấu ngoặc kép, bạn phải thoát khỏi nhân vật khác:

"\$" 

Nhưng nó cũng cho phép đối với một số điều tiện lợi giống như thêm một mới-line đến cùng:

"my string\n" 

với dấu ngoặc kép duy nhất bạn sẽ phải làm một nối:

'my string' . chr(10) 
'my string' . "\n" 

Nói chung, dấu nháy đơn nhanh hơn vì chúng "câm".

Tuy nhiên, thông thường người ta không nên thực sự lo lắng về những vấn đề này, được gọi là tối ưu hóa sớm, và nên tránh.

Một vài từ về tối ưu hóa: thông thường, đầu tiên bạn nên viết chương trình theo cách nó hoạt động và sau đó tìm các nút cổ chai lớn nhất và sửa những lỗi cụ thể đó. Nếu tốc độ chuỗi thực sự là một vấn đề cho bạn trong PHP, bạn có thể muốn xem xét việc chuyển sang ngôn ngữ khác.

Về tốc độ: bạn có thể muốn tập trung nhiều hơn vào việc sử dụng bộ nhớ so với thời gian CPU. Trong những trường hợp này, thời gian CPU có thể được coi là khá ổn định. Thời gian CPU có liên quan hơn khi viết các thuật toán sẽ lặp lại nhiều lần.

Về ghép nối: bạn càng ghép các chuỗi bằng cách sử dụng toán tử dấu chấm, càng có nhiều bộ nhớ bạn sẽ sử dụng.

Hãy xem xét điều này:

$str1 = 'asdf'; 
$str2 = 'qwer'; 

// this will result in more memory being allocated for temporary storage 
echo $str1 . $str2; 

// this will not allocate as much memory as the previous example 
echo $str1; 
echo $str2; 
+2

Cách khác: 'echo $ str1, $ str2;' – nyuszika7h

0

phương châm và câu trả lời của tôi là: Để lại nó vào trình biên dịch để viết mã máy. Tôi sẽ cho bạn biết ý tôi là ...

Sử dụng dấu nháy đơn khi bạn không cần bao gồm biến PHP, nếu không hãy sử dụng dấu ngoặc kép. Đừng lo lắng về hiệu suất chỉ sử dụng APC trên các máy chủ sản xuất. Thay vào đó tập trung vào viết mã duy trì nhất; sử dụng nhận xét, dấu ngoặc kép, v.v. ngay cả khi chúng có thể làm chậm mã xuống. Mỗi tối ưu hóa làm giảm khả năng bảo trì/khả năng đọc của mã là xấu, hãy để nó vào bộ đệm-mã hóa và trình biên dịch để biến mã của bạn thành mã máy, không tự làm ... làm xáo trộn mã nguồn của bạn vì tối ưu hóa cháy.

5

Đối với hiệu suất, như những người khác đã chứng minh, nó là nhẹ nhanh hơn để sử dụng dấu nháy đơn chứ không phải là dấu ngoặc kép.

Trích dẫn đơn, nếu áp dụng cho khoa học dễ đọc và tránh xa tính chủ quan thực sự thêm nhiều "tiếng ồn". Tiếng ồn và làm thế nào nó liên quan đến khả năng đọc được nói rất nhiều về trong cuốn sách Clean Code và người ta có thể kết luận rằng không phải là khoảng trắng bạn phải xem, nó càng cản trở khả năng đọc. Nếu áp dụng cho chủ quan, hầu hết những nơi mà tôi đã dành thời gian để đọc thực sự thích duy nhất trên dấu ngoặc kép.

Sử dụng phán đoán của bạn.

$var = "My $string with $lots of $replacements." 

là nhiều hơn nữa có thể đọc hơn:

$var = 'My ' . $string . ' with ' . $lots . ' of ' . $replacements . '.'; 

tôi sẽ thừa nhận rằng:

$var = "My string."; 

Trông gần như giống nhau như:

$var = 'My String.'; 

Tuy nhiên giới thiệu sau ít tiếng ồn hơn và khi có nhiều mã aro und it mỗi chút giúp, chưa kể đến những lợi ích khác mà bạn nhận được từ việc sử dụng dấu nháy đơn.

Cuối cùng, tôi thích KISS hơn. Sử dụng dấu nháy đơn trừ khi bạn cần dấu ngoặc kép. Quy ước đơn giản dễ nhập hơn, dễ bảo trì hơn, dễ phân tích cú pháp hơn và dễ đọc hơn.

Các vấn đề liên quan