Mengapa contoh arahan Blade menunjukkan gema dan tidak hanya mengembalikan string?

Apa yang saya temukan di internet.

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

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

Di sini terasa saat runtime fungsi tersebut akan dipanggil. Lalu kenapa tidak dilakukan saja

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

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

Saya telah melihat banyak contoh mengikuti pola return "<?php echo ..." dan saya tidak mengerti maksudnya.

EDIT untuk memperjelas dari komentar dan jawaban, asumsi utama dicetak tebal:

Pada contoh pertama, $expression diledakkan dalam fungsinya, saya bertanya-tanya, bagaimana Blade bisa meledak secara dinamis hanya dari kode php yang dikembalikan? Kode seperti itu membuat saya percaya bahwa fungsi arahan dan kode yang dikembalikan dijalankan pada setiap rendering?

Kedua, jika pernyataan return berisi tag pembuka PHP, saya kira itu diproses sebagai skrip PHP standar, jadi mengapa tidak mengembalikan string?


person AsTeR    schedule 01.02.2018    source sumber
comment
return "<?php echo {$greet} . ' ' . {$name}; ?>"; berikut ini adalah hasil akhir yang seharusnya menggantikan arahan tersebut. Jika kamu kembali saja maka tidak akan ada apa-apa. Tanggung jawab Anda sebagai pengendali adalah melakukan apa yang ingin Anda lakukan.   -  person The Alpha    schedule 01.02.2018
comment
@TheAlpha Saya telah melakukan sedikit edit untuk memperjelas   -  person AsTeR    schedule 02.02.2018
comment
Hanya satu rendering yang terjadi, yaitu rendering file blade yang Anda lihat di browser. Anggap saja sebagai skrip PHP yang menghasilkan skrip PHP (dinamis).   -  person    schedule 02.02.2018


Jawaban (1)


String yang dikembalikan dari arahan dilewatkan melalui Blade Compiler sebelum dirender. Ini menghasilkan file skrip PHP yang dapat dieksekusi yang dapat diproses oleh server.

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

Lihat file cache di storage/framework/views untuk melihat hasil akhirnya.

person Community    schedule 01.02.2018
comment
Terima kasih, saya telah mengedit pertanyaan (saya akan memeriksa cache untuk memahami lebih baik). - person AsTeR; 02.02.2018