Artikel ini, yang asalnya ditulis oleh Thomas Punt dan dicetak semula dengan izin, perincian penciptaan pengendali pelbagai adat (| & gt;) dalam PHP. Ini menyelam mendalam ke dalam PHP dalaman, dengan mengandaikan kebiasaan dengan membina PHP dari sumber (rujuk kepada PHP Internals Book for Guidance).
Proses ini melibatkan mengubahsuai empat bidang utama: lexer, parser, peringkat penyusunan, dan zend vm.
Langkah -langkah utama:
Kemas kini lexer: lexer diubah suai (Zend/Zend_Language_Scanner.l) untuk mengenali "| & gt;" dan menjana token . RE2C kemudiannya digunakan untuk menjana semula Lexer. Token T_RANGE
juga diisytiharkan dalam zend/zend_language_parser.y. Akhirnya, fail T_RANGE
memerlukan regenerasi menggunakan ext/tokenizer/tokenizer_data.c
untuk memastikan lanjutan tokenizer mengiktiraf token baru. tokenizer_data_gen.sh
) dicipta dalam .
T_RANGE
ZEND_AST_RANGE
Zend/zend_ast.h
.
ZEND_AST_RANGE
zend_compile_range
ZEND_RANGE
Zend VM Update:
dikemas kini untuk memaparkan pengendali baru dengan betul.
ZEND_RANGE
Zend/zend_vm_gen.php
Zend/zend_ast.c
semantik pengendali pelbagai:
membuat array berdasarkan dua operan (min dan max):
kenaikan oleh satu.
|>
operan mestilah bilangan bulat atau terapung.
min == max
Error
Contoh: min > max
1 |> 3; // [1, 2, 3] 2.5 |> 5; // [2.5, 3.5, 4.5] $a = $b = 1; $a |> $b; // [1] 2 |> 1; // Error exception 1 |> '1'; // Error exception new StdClass |> 1; // Error exception
Penjelasan terperinci ini memberikan gambaran menyeluruh mengenai proses tersebut. Artikel ini menyimpulkan dengan menyatakan bahawa ini adalah satu pelaksanaan dan versi yang lebih efisien akan diterokai dalam artikel masa depan. Seksyen Soalan Lazim juga dimasukkan, meliputi soalan umum mengenai penggunaan dan tingkah laku pengendali pelbagai.
Atas ialah kandungan terperinci Melaksanakan pengendali jarak dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!