Lợi thế của việc sử dụng heredoc trong PHP là gì và bạn có thể đưa ra một ví dụ không?
Lợi thế của việc sử dụng heredoc trong PHP là gì và bạn có thể đưa ra một ví dụ không?
Câu trả lời:
Cú pháp heredoc sạch hơn nhiều đối với tôi và nó thực sự hữu ích cho các chuỗi nhiều dòng và tránh trích dẫn các vấn đề. Ngày trước tôi thường sử dụng chúng để xây dựng các truy vấn SQL:
$sql = <<<SQL
select *
from $tablename
where id in [$order_ids_list]
and product_name = "widgets"
SQL;
Đối với tôi điều này có xác suất giới thiệu lỗi cú pháp thấp hơn so với sử dụng dấu ngoặc kép:
$sql = "
select *
from $tablename
where id in [$order_ids_list]
and product_name = \"widgets\"
";
Một điểm khác là tránh thoát dấu ngoặc kép trong chuỗi của bạn:
$x = "The point of the \"argument" was to illustrate the use of here documents";
Biểu tượng với ở trên là lỗi cú pháp (trích dẫn thoát bị thiếu) Tôi vừa giới thiệu trái ngược với cú pháp tài liệu ở đây:
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
Đó là một chút về phong cách, nhưng tôi sử dụng các quy tắc sau đây cho các tài liệu đơn, đôi và ở đây để xác định chuỗi:
'no variables here'
"Today is ${user}'s birthday"
--ansi
chế độ tuân thủ. Chuỗi SQL phải sử dụng dấu ngoặc đơn.
SELECT * FROM "order" WHERE "table"='1'
Heredoc là một thay thế tuyệt vời cho chuỗi trích dẫn vì tăng khả năng đọc và bảo trì. Bạn không phải thoát dấu ngoặc kép và (tốt) IDE hoặc trình soạn thảo văn bản sẽ sử dụng tô sáng cú pháp thích hợp.
Một ví dụ rất phổ biến: lặp lại HTML từ bên trong PHP:
$html = <<<HTML
<div class='something'>
<ul class='mylist'>
<li>$something</li>
<li>$whatever</li>
<li>$testing123</li>
</ul>
</div>
HTML;
// Sometime later
echo $html;
Nó rất dễ đọc và dễ bảo trì.
Giải pháp thay thế là lặp lại các chuỗi trích dẫn, cuối cùng có chứa các trích dẫn thoát và IDE sẽ không làm nổi bật cú pháp cho ngôn ngữ đó, dẫn đến khả năng đọc kém và khó bảo trì hơn.
Câu trả lời cập nhật cho ý thức chung của bạn
Tất nhiên, bạn sẽ không muốn thấy một truy vấn SQL được tô sáng dưới dạng HTML. Để sử dụng các ngôn ngữ khác, chỉ cần thay đổi ngôn ngữ theo cú pháp:
$sql = <<<SQL
SELECT * FROM table
SQL;
Trước hết, tất cả các lý do là chủ quan. Nó giống như một vấn đề của hương vị hơn là một lý do.
Cá nhân, tôi thấy heredoc khá vô dụng và thỉnh thoảng sử dụng nó, hầu hết khi tôi cần đưa một số HTML vào một biến và không muốn làm phiền với bộ đệm đầu ra, để tạo một thông điệp email HTML chẳng hạn.
Định dạng không phù hợp với quy tắc thụt lề chung, nhưng tôi không nghĩ đó là một vấn đề lớn.
//some code at it's proper level
$this->body = <<<HERE
heredoc text sticks to the left border
but it seems OK to me.
HERE;
$this->title = "Feedback";
//and so on
Đối với các ví dụ trong câu trả lời được chấp nhận, nó chỉ đơn thuần là gian lận.
Thực tế, các ví dụ chuỗi sẽ ngắn gọn hơn nếu người ta không lừa dối họ
$sql = "SELECT * FROM $tablename
WHERE id in [$order_ids_list]
AND product_name = 'widgets'";
$x = 'The point of the "argument" was to illustrate the use of here documents';
Tôi không biết nếu tôi nói heredoc là sự lười biếng. Người ta có thể nói rằng làm bất cứ điều gì là sự lười biếng, vì luôn có nhiều cách rườm rà hơn để làm bất cứ điều gì.
Ví dụ: trong một số trường hợp nhất định, bạn có thể muốn xuất văn bản, với các biến được nhúng mà không phải tìm nạp từ tệp và chạy thay thế mẫu. Heredoc cho phép bạn từ bỏ việc phải thoát dấu ngoặc kép, vì vậy văn bản bạn nhìn thấy là văn bản bạn xuất ra. Rõ ràng, có một số tiêu cực, ví dụ, bạn không thể thụt vào di sản của mình và điều đó có thể gây bực bội trong một số tình huống, đặc biệt là nếu bạn dính vào cú pháp hợp nhất, đó là tôi.