PHP kawm thiab Zend cav Internals

Txheej txheem cej luam: Version 1.0 ntawm qhov Zend cav yog ib feem tseem ceeb heev xws li cov mob plawv thiab hlwb ntawm PHP 4.0. Nws muaj txoj kev uas siv cov qauv ncua thiab cov vaj tse rau hauv tej qhov chaw modules. Nws kuj implements cov lus syntax thiab. Lub Zend cav 1.0 yog ua tau tus thib ob kho nqi lus ntawm tus PHP scripting cav. Nws tseem raws li txoj cai xws li lwm cov PHP 3.0 cav uas twb yeej cav Zend 0.5. Tam sim no nws yog permissible yuav mus ib txog kev los ntawm PHP 3.0 mus 4.0. Txoj kev loj hlob tau tib 'xeev siab' as per PHP 3.0. Peb xav tias nws yog lub sij hawm yog yuav pib ua hauj lwm ntawm ib tug kho nqi lus hauv lub Zend cav. Nws yuav tau teeb lug tshiab thiab cov kev daws tau ib co kev cov teeb meem nyuaj tshaj muag los yog daim PHP designer developers.

Nyob rau cov tshooj no kuv yuav tham txog lub cav Zend internals le PHP platform.

Taw qhia: Cav Zend yog ib qhov chaw qhib scripting cav uas peb paub thiab ua ib tug neeg txhais lus rau PHP programming lus. Qhov no yog chiv tsim los ntawm ob tug me nyuam kawm ntawv hauv lub Technion – Ua Ixayees lub koom haum cov Technology. Cav Zend yog ib tug virtual tshuab los sis VM. Raws li peb paub tias ib lub tshuab Virtual tau yog tsis muaj dab tsi tab sis cov uas simulates lub computer software. Lub Zend cav muaj nqaij ntau Cheebtsam e.g. ib compiler, ZFMI (Zkawg Function Module Kuvnterface) thiab ib virtual CPU los ua tus executor.

Li cas Zend cav xwb:

Ib Zend cav muaj peb lub Cheebtsam loj –

  • Lexical analyzer los yog lexer
  • Parser
  • Executor

Peb paub tias Zend yog ib tug scripting cav thiab nws ua haujlwm li ib tug neeg txhais lus. Yog li cia peb xyuas ntau theem ib tsab ntawv uas yog nyuam ib Zend cav. Tsab ntawv kis tau los ntawm cov kauj ruam hauv qab no thiab thaum kawg tau txais ntawv kho mob tseg los ntawm Zend cav –

  • Kauj ruam 1Tsom xam lexical – Hauv no kauj ruam tsab ntawv kis los ntawm ib tug lexical analyzer los yog lexer. Tsab ntawv uas yog neeg tshwmsim yog migrated rau tokens uas to taub thiab txais los ntawm lub tshuab no. Thaum twg tsab ntawv tag nrho yog tokenized, tus tokens yuav kis mus rau cov parser.
  • Kauj ruam 2Parsing – Nyob rau hauv cov kauj ruam no, cov parser parses tus tokens uas nws tau txais los ntawm cov lexer thiab generates ib txheej qhia uas sau rau hauv Zend cav. Lub Zend cav no tsis muaj dab tsi tab sis ib lub tshuab virtual (VM) nrog rau kev qhia ntawv teev uas zoo xws li cov lus sib dhos thiab executes nws. Parser generates ntoo syntax paub daws teeb uas yuav tsum optimized ua ntej yuav lem rau qhov chaws generator. No tseem mechanism ntawv hu ua muab tso ua ke. Muab tso ua ke rau lub tso zis yog ib qho chaws intermediate uas yog ib tug tshuab ywj siab hais txog txoj kev siv lub tshuab virtual Zend. Intermediate txoj muaj ib array cov kev qhia npaj rau lub tshuab Zend Virtual los yog cov sijhawm ua haujlwm cov lis dej num los ua short opcodes. Cov opcodes yog peb cov chaw lis dej num – ob tug operands rau lub tswv yim thiab ib qho rau cov qhov tso zis ntau lawm. Ntxiv rau no lub opcodes tseem muaj ib handler uas processes lub operands. Cov opcodes muaj cov lus qhia ua txhua hom haujlwm xws li los ntawm cov lag luam rau cov ob inputs yooj yim thiab storing cov zis mus rau lub operand thib peb rau ib txoj scenario uas yuav tsum tau siv lub tswv yim ib hwj xwm txaus.
  • Kauj ruam 3Tiav – Thaum lub chaws intermediate generated, nws kis rau tus executor uas nyeem neb cov lus qhia los ntawm cov array thiab executes lawv.

Muab tso ua ke thiab tiav theem muaj tseg los ntawm ob tug quas zog nyob rau hauv lub Zend cav. Cov no yog Zend_compile thiab Zend_execute.
Neeg rau zaub mov sis uas muaj Zend cav Web site:
Lub sab hauv architecture ntawm tus Zend cav no yog muaj li nram qab no hauv daim duab –

Zend engine Architecture

Zend cav Architecture

Duab 1: Zend cav Architecture

Lub cheebtsam uas Zend cav: Tam sim no peb cia saib lub cheebtsam uas xa cav ib los ntawm ib lub.

ZMFI los yog Zend muaj nuj nqi Module Interface:
No interface yog cov uas ua li ib channel kev sib txuas lus ntawm cov nuj nqi modules. Modules muaj nuj nqi dab tsi tab sis PHP extensions uas muaj ib co module sau thiab nyob hauv lawv cov.

Opcode Cache: Opcode cache yog ib tug cache generic uas nyob lub npe nyob rau hauv lub Zend cav thiab caches tus opcode uas muaj ntaub ntawv. Yog nug txog cov ntaub ntawv dua nws cia li tau ntawv kho mob tseg ntawm tus cache yog tias tsis muaj kev hloov rau hauv.
Piv txwv: Peb muab ib qho piv txwv los saib seb puas txawv theem ib lub chaws PHP thaum nws mus txog ib lub cav Zend.
Ua ntej, peb yuav tham ib cov lus piv txwv li nram qab no.

Qhia 1: PHP qauv ntaub ntawv

[Chaws]

<?php

$name = 'Ricardo';

ncha $name;

?>

[/Chaws]

Cov hais los saum toj PHP chaws thaum nyuam cav Zend, yuav txia ua tus opcode hauv qab no –

Showing generated opcode

Qhia generated opcode

Image2: Qhia generated opcode

Tus executor ntawm tus Zend cav nyeem cov opcodes ib tug zuj zus thiab executes as per cov kev qhia ntawv hais nyob rau hauv cov opcode. Cov cai hais los saum toj no tseg yam nram qab no –

  • Opnum 0 los yog Opcode 0 – Nyob rau hauv cov kauj ruam no, lub pointer los kuj sib txawv thiab cov – ' lub npe’ yog muab cov Register 0. Peb siv tib ' ZEND_FETCH_W’ (qhov w stands rau sau) thiab nws los kuj sib txawv thiab qhov cob.
  • Opnum 1 los yog Opcode 1 – Nyob rau hauv cov kauj ruam no, cov ZEND_ASSIGN handler assigns cov nqi – ' Ricardo’ mus Register 0 Nws yog pointer rau cov kuj sib txawv thiab – 'npe'. Rau npe 1 yog tseem raug tuaj hauj lwm tiam sis yeej tsis siv. Nws yuav muaj tau ntaub yog tsim muaj ib qho kev qhia zoo li –

[Chaws]

Yog hais tias ($lub npe == 'Ricardo') { }

[/Chaws]

  • Opnum 2 los yog Opcode 2 – Nyob rau hauv cov kauj ruam no, rov peb nqa hom kab mob cov $name nrho mus Register 2. Peb siv cov opcode ZEND_FETCH_R raws li tau kuj sib txawv thiab qhov yog siv nyob rau hauv ib read qhov ntsiab lus teb.
  • Opnum 3 los yog Opcode 3 – Nyob rau hauv cov kauj ruam no, cov kev qhia ntawv ' ZEND_ECHO’ prints tus nqi ntawm Register 2 yog xa cov nqi rau cov qhov tso zis buffering lawv.
  • Opnum 4 0r Opcode 4 – Nyob rau hauv cov kauj ruam no, cov kev qhia ntawv ' ZEND_RETURN’ yog hu ua uas teev cov nqi ntawm tsab ntawv los tuaj 1. Raws li peb paub txawm hais tias peb tsis hu tus xa qhia tau meej heev uas yog muaj tseeb tiag no cov ntaub ntawv kom zoo, txhua tsab ntawv muaj ib qho kev xa implicit 1.

Tam sim no peb yuav tau ua ib tug piv txwv uas nyuab me ntsis zoo li nram qab no

Qhia 2: Qauv PHP ntaub ntawv nrog conversion rau qaum rooj plaub

[Chaws]

<?php $name = 'Ricardo'; ncha strtoupper($lub npe); ?>

[/Chaws]

Raws li peb pom no tsab ntawv no initializes kuj sib txawv thiab ib tug li thiab ces prints zoo li qub tom qab converting cov ntawv nyeem rau hauv rooj plaub qaum. Yog lub chaws intermediate pob tseg rau saum toj no PHP tsab ntawv zoo heev rau cov ua ntej lawm ib –

Showing generated opcode

Qhia generated opcode

Image3: Qhia generated opcode

Lub opcodes nyob rau hauv qhov piv txwv 2 saum toj no zoo heev tsuas yog cov nram no yog –

  • Opnum 3 los yog Opcode 3 – Nyob rau hauv cov kauj ruam no, cov kev qhia ntawv ' ZEND_SEND_VAR’ pushes ib pointer mus Register 2 muaj kuj sib txawv thiab cov uas – $lub npe rau cov pawg ntawm cov lus. No cav pawg no tsim los yog hu ua yog tus tso cai rau qhov kev txiav txim prints tus nqi ntawm Register 2 yog xa cov nqi rau cov qhov tso zis buffering lawv.

· Opnum 4 0r Opcode 4 – Nyob rau hauv cov kauj ruam no, cov kev qhia ntawv ‘ZEND_DO_FCALL’ yog hu ua uas ntxiv hauv lawv hu cov ' strtoupper’ muaj nuj nqi thiab kuj mentions uas cov zis yuav tsum raug xa mus Register 3. Daim duab hauv qab no qhia tau hais tias lub chaw ua hauj lwm txaus lawm txawm yog ib tsab ntawv PHP kis los ntawm tus Zend cav.

Showing work flow in Zend engine

Qhia ua hauj lwm txaus hauv Zend cav

Duab 4: Qhia ua hauj lwm txaus hauv Zend cav

Txoj kev:

Peb cia saib lub ntsab lug peb sib tham nyob rau hauv daim ntawv cov lus hauv qab no txhob –

  • Zend cav uas ua kom tus mob plawv thiab hlwb ntawm PHP 4.0
  • Cav Zend yog ib tug virtual tshuab uas yog tsim los ntawm ob tug me nyuam kawm ntawv nyob Technion – Ua Ixayees lub koom haum cov Technology.
  • Zend cav muaj peb lub Cheebtsam loj –
    • Lexical analyzer los yog cov Lexer – Lub luag hauj lwm los tokenize tsab ntawv
    • Parser – Parses lub tokens thiab generates tus opcodes los yog opnums
    • Executor – Executes lub Opcodes.
  • Lub Zend cav muaj nrog lub Cheebtsam nram qab no –
    • ZFMI los yog Zend muaj nuj nqi Module Interface – Cov kev sib txuas lus channel sib txawv modules
    • Opcode Cache – Caches lub opcodes kom lawv yuav tsum reused yog hais tias yuav tsum tau.

 

Tagged: ,
============================================= ============================================== Yuav zoo TechAlpine phau ntawv rau Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Txaus siab rau qhov blog? Tshaj tawm lus thov :)

Follow by Email
LinkedIn
LinkedIn
Share