เหตุใดตัวอย่างคำสั่ง Blade จึงแสดงเสียงสะท้อนและไม่ใช่แค่ส่งคืนสตริง

สิ่งที่ฉันพบ บนอินเทอร์เน็ต

\Blade::directive('hello', function ($expression) {
    list($greet, $name) = explode(', ', $expression);

    return "<?php echo {$greet} . ' ' . {$name}; ?>";
});

รู้สึกว่า ณ รันไทม์ฟังก์ชันจะถูกเรียกใช้ แล้วทำไมไม่ทำเฉย.

\Blade::directive('hello', function ($expression) {
    list($greet, $name) = explode(', ', $expression);

    return $greet . ' ' . $name;
});

ฉันได้เห็นตัวอย่างมากมายตามรูปแบบ return "<?php echo ..." และฉันไม่เข้าใจประเด็นจริงๆ

แก้ไข เพื่อชี้แจงจากความคิดเห็นและคำตอบ สมมติฐานหลักเป็นตัวหนา:

ในตัวอย่างแรก $expression ถูกระเบิดในฟังก์ชัน ฉันสงสัยว่า Blade จะระเบิดแบบไดนามิกจากโค้ด php ที่ส่งคืนได้อย่างไร โค้ดดังกล่าวทำให้ฉันเชื่อว่า ทั้งฟังก์ชันคำสั่งและโค้ดที่ส่งคืนทำงานในการเรนเดอร์แต่ละครั้ง

ประการที่สอง หาก คำสั่ง return มีแท็กเปิด PHP ฉันเดาว่า มันถูกประมวลผลเป็นสคริปต์ PHP มาตรฐาน แล้วทำไมไม่ส่งคืนสตริงล่ะ


person AsTeR    schedule 01.02.2018    source แหล่งที่มา
comment
return "<?php echo {$greet} . ' ' . {$name}; ?>"; ต่อไปนี้เป็นผลลัพธ์สุดท้ายที่ควรจะแทนที่คำสั่ง ถ้ากลับมาก็ไม่มีอะไร.. เป็นความรับผิดชอบของผู้ดูแลที่จะทำสิ่งที่คุณต้องการทำ   -  person The Alpha    schedule 01.02.2018
comment
@TheAlpha ฉันได้แก้ไขเล็กน้อยเพื่อชี้แจง   -  person AsTeR    schedule 02.02.2018
comment
การเรนเดอร์เกิดขึ้นเพียงครั้งเดียว นั่นคือการเรนเดอร์ไฟล์เบลดซึ่งเป็นสิ่งที่คุณเห็นในเบราว์เซอร์ คิดว่าเป็นสคริปต์ PHP ที่สร้างสคริปต์ PHP (ไดนามิก)   -  person    schedule 02.02.2018


คำตอบ (1)


สตริงที่ส่งคืนจากคำสั่งจะถูกส่งผ่าน Blade Compiler ก่อนที่จะเรนเดอร์ กำลังสร้างไฟล์สคริปต์ PHP ที่ปฏิบัติการได้ซึ่งเซิร์ฟเวอร์สามารถประมวลผลได้

https://laravel.com/api/5.5/Illuminate/View/Compilers/BladeCompiler.html

ดูไฟล์แคชใน storage/framework/views เพื่อดูผลลัพธ์สุดท้าย

person Community    schedule 01.02.2018
comment
ขอบคุณ ฉันได้แก้ไขคำถามแล้ว (ฉันจะตรวจสอบในแคชเพื่อทำความเข้าใจให้ดีขึ้น) - person AsTeR; 02.02.2018