Rumah > pembangunan bahagian belakang > tutorial php > Melaksanakan pengendali jarak dalam php

Melaksanakan pengendali jarak dalam php

Joseph Gordon-Levitt
Lepaskan: 2025-02-15 12:14:13
asal
804 orang telah melayarinya

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.

Implementing the Range Operator in PHP

Langkah -langkah utama:

  1. 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

  2. Kemas kini parser Parser:
  3. parser (zend/zend_language_parser.y) dikemas kini untuk menentukan penggunaan, keutamaan (sama seperti pengendali angkasa), dan bersekutu (bukan bersekutu, mencegah chaining) 🎜> operator. Node AST baru (

    ) dicipta dalam . T_RANGE ZEND_AST_RANGE Zend/zend_ast.h

    Kemas kini peringkat kompilasi:
  4. Tahap penyusunan (Zend/Zend_Compile.c) diubahsuai untuk mengendalikan node Ast. Fungsi
  5. ditambah, yang memancarkan kod

    . ZEND_AST_RANGE zend_compile_range ZEND_RANGE Zend VM Update:

    Zend VM (Zend/Zend_VM_DEF.H) dikemas kini untuk mengendalikan
  6. opcode. Ini melibatkan menentukan tingkah laku opcode, termasuk mengendalikan jenis operan yang berlainan (bilangan bulat dan terapung sahaja), pengendalian ralat (pengecualian untuk input tidak sah atau julat yang berlebihan besar), dan menghasilkan array yang dihasilkan. Zend VM diperbaharui menggunakan
  7. . Akhirnya, pencetak cantik AST dalam

    dikemas kini untuk memaparkan pengendali baru dengan betul. ZEND_RANGE Zend/zend_vm_gen.php Zend/zend_ast.c semantik pengendali pelbagai:

operator

membuat array berdasarkan dua operan (min dan max):

kenaikan oleh satu.

|> operan mestilah bilangan bulat atau terapung.

    jika
  • , mengembalikan array tunggal.
  • melemparkan pengecualian
  • jika operan tidak sah,
  • , atau julatnya terlalu besar. 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
    Salin selepas log masuk

    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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan