ข้อดีของการใช้heredocใน PHP คืออะไรและคุณสามารถแสดงตัวอย่างได้หรือไม่?
ข้อดีของการใช้heredocใน PHP คืออะไรและคุณสามารถแสดงตัวอย่างได้หรือไม่?
คำตอบ:
ไวยากรณ์ heredoc นั้นสะอาดกว่าสำหรับฉันมากและมันมีประโยชน์มากสำหรับสตริงหลายบรรทัดและหลีกเลี่ยงปัญหาการอ้างอิง ย้อนกลับไปในวันที่ฉันใช้เพื่อสร้างแบบสอบถาม SQL:
$sql = <<<SQL
select *
from $tablename
where id in [$order_ids_list]
and product_name = "widgets"
SQL;
สำหรับฉันสิ่งนี้มีความเป็นไปได้น้อยกว่าที่จะแนะนำข้อผิดพลาดทางไวยากรณ์มากกว่าการใช้เครื่องหมายคำพูด:
$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";
pProblem ที่มีด้านบนเป็นข้อผิดพลาดทางไวยากรณ์ (คำพูดที่หายไปหลบหนี) ฉันเพิ่งนำมาใช้ซึ่งตรงข้ามกับที่นี่ไวยากรณ์ของเอกสาร:
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
มันมีสไตล์นิดหน่อย แต่ฉันใช้สิ่งต่อไปนี้เป็นกฎสำหรับเอกสารเดี่ยวสองครั้งและที่นี่เพื่อกำหนดสตริง:
'no variables here'
"Today is ${user}'s birthday"
--ansi
โหมดที่เข้ากันได้ สตริง SQL ต้องใช้เครื่องหมายคำพูดเดี่ยว
SELECT * FROM "order" WHERE "table"='1'
Heredoc เป็นทางเลือกที่ยอดเยี่ยมสำหรับสตริงที่ยกมาเนื่องจากความสามารถในการอ่านและการบำรุงรักษาที่เพิ่มขึ้น คุณไม่จำเป็นต้องหลีกเลี่ยงคำพูดและ IDE (ดี) หรือเครื่องมือแก้ไขข้อความจะใช้การเน้นไวยากรณ์ที่เหมาะสม
มากตัวอย่างที่พบ: สะท้อนออกมาจากภายใน HTML 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;
ง่ายต่อการอ่านและบำรุงรักษาง่าย
อีกทางเลือกหนึ่งคือการสะท้อนสตริงที่ยกมาซึ่งจบลงด้วยคำพูดที่หลบหนีและ IDE จะไม่เน้นไวยากรณ์สำหรับภาษานั้นซึ่งนำไปสู่การอ่านไม่ดีและความยากลำบากในการบำรุงรักษามากขึ้น
อัปเดตคำตอบสำหรับสามัญสำนึกของคุณแล้ว
แน่นอนคุณไม่ต้องการเห็นข้อความค้นหา SQL ที่เน้นเป็น HTML หากต้องการใช้ภาษาอื่นเพียงเปลี่ยนภาษาในไวยากรณ์:
$sql = <<<SQL
SELECT * FROM table
SQL;
IDE บางตัวเน้นรหัสในสตริง heredoc โดยอัตโนมัติ - ซึ่งใช้ heredoc สำหรับ XML หรือ HTML ที่ดึงดูดสายตา
ฉันชอบมันสำหรับส่วนที่ยาวกว่าของเช่น XML เนื่องจากฉันไม่ต้องสนใจเรื่องการอ้างอิงตัวอักษรและสามารถวาง XML ได้
ก่อนอื่นเหตุผลทั้งหมดเป็นเรื่องส่วนตัว มันเป็นเรื่องของรสนิยมมากกว่าเหตุผล
ส่วนตัวฉันพบ heredoc ค่อนข้างไร้ประโยชน์และใช้เป็นบางครั้งส่วนใหญ่เวลาที่ฉันต้องได้รับ HTML เป็นตัวแปรและไม่ต้องการรำคาญกับการส่งออกบัฟเฟอร์ในรูปแบบข้อความอีเมล HTML เช่น
การจัดรูปแบบไม่สอดคล้องกับกฎการเยื้องทั่วไป แต่ฉันไม่คิดว่ามันเป็นเรื่องใหญ่
//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
สำหรับตัวอย่างในคำตอบที่ยอมรับก็เป็นเพียงการโกง
อันที่จริงแล้วตัวอย่างของสตริงมีความรัดกุมถ้าไม่มีใครโกงพวกเขา
$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';
ฉันไม่รู้ว่าฉันจะพูดว่า heredoc เป็นความขี้เกียจ เราสามารถพูดได้ว่าการทำสิ่งใดสิ่งหนึ่งคือความเกียจคร้านเนื่องจากมีวิธีที่ยุ่งยากมากกว่าในการทำสิ่งใด
ตัวอย่างเช่นในบางสถานการณ์คุณอาจต้องการส่งออกข้อความด้วยตัวแปรฝังตัวโดยไม่ต้องดึงข้อมูลจากไฟล์และเรียกใช้การแทนที่แม่แบบ Heredoc ช่วยให้คุณไม่ต้องออกจากคำพูดดังนั้นข้อความที่คุณเห็นคือข้อความที่คุณส่งออก เห็นได้ชัดว่ามีข้อเสียบางอย่างตัวอย่างเช่นคุณไม่สามารถเยื้อง heredoc ของคุณและนั่นอาจทำให้คุณหงุดหงิดในบางสถานการณ์