PHP ialah bahasa skrip sebelah pelayan sumber terbuka yang popular yang banyak digunakan untuk pembangunan web. Ia boleh mengendalikan data dinamik dan mengawal output HTML, tetapi bagaimana untuk mencapai ini? Kemudian, artikel ini akan memperkenalkan mekanisme pengendalian teras dan prinsip pelaksanaan PHP, dan menggunakan contoh kod khusus untuk menggambarkan lagi proses pengendaliannya.
Tafsiran kod sumber PHP
Kod sumber PHP ialah program yang ditulis dalam bahasa C Selepas penyusunan, ia menghasilkan fail boleh laku php.exe Untuk PHP yang digunakan dalam pembangunan web, ia biasanya dilaksanakan melalui pelayan web seperti Apache atau Nginx. Antara fail yang dilaksanakan oleh PHP, terasnya ialah Zend Engine. Zend Engine ialah pengurus teras PHP, yang bertanggungjawab untuk menukar kod sumber PHP kepada kod mesin yang boleh difahami oleh sistem pengendalian.
Enjin Zend terutamanya terdiri daripada dua bahagian, iaitu Zend Compiler dan Zend Executor. Zend Compiler digunakan untuk menyusun kod PHP ke dalam kod perantaraan yang dipanggil opcode. Zend Executor ialah penterjemah kod PHP, yang boleh menjalankan opcode pada komputer tempatan.
Selepas menulis kod PHP, ia mula-mula akan dikompilasi menjadi kod bait oleh Zend Compiler, dan kod bait ini disimpan terus dalam ingatan. Dari perspektif prestasi, kaedah penyusunan ini lebih cekap. Kerana sebelum fail disusun menjadi opcode, kita boleh menggunakan Zend Compiler untuk mengoptimumkan kod untuk mencapai kecekapan pelaksanaan yang lebih tinggi. Bagi pembangun yang menulis pustaka atau rangka kerja sumber terbuka, ini ialah cara yang sangat berkesan untuk meningkatkan kecekapan pelaksanaan kod sambil memastikan keselamatan dan kebolehskalaan.
Mekanisme masa jalan PHP
Selepas kod PHP disusun, Enjin Zend akan melaksanakan opcode. Untuk komputer tempatan, ia tidak memahami apa itu opcode, jadi ia memerlukan Enjin Zend untuk menghuraikan dan melaksanakannya. Kita mungkin tertanya-tanya, bagaimanakah pelaksanaan opcode dilaksanakan?
Zend Engine akan menghuraikan opcode ke dalam panggilan fungsi yang sepadan dengan bahasa C Dalam proses ini, beberapa jenis data mesin maya Zend akan digunakan, seperti zval, HashTable, zend_class_entry, dsb. Jenis data ini ialah jenis data dalaman Zend dan digunakan untuk mewakili struktur sintaks PHP yang berbeza dan jenis pembolehubah. Semasa proses ini, Zend Engine akan menukar beberapa jenis data kepada jenis data yang komputer tempatan boleh beroperasi secara langsung, seperti long, double, char, dsb. Pendekatan ini mengoptimumkan kecekapan sepanjang keseluruhan proses.
Fungsi terbina dalam PHP dibina berdasarkan struktur seperti zend_function_entry. Pembangun juga boleh menggunakan kaedah ini untuk membina fungsi terbina dalam mereka sendiri dengan cepat apabila membangunkan sambungan atau modul PHP.
Proses pelaksanaan kod PHP boleh diperhatikan melalui alat nyahpepijat. Menggunakan alat penyahpepijatan seperti XDebug, anda boleh melakukan penyahpepijatan titik putus, pelaksanaan satu langkah, dsb. semasa pelaksanaan kod PHP.
Jika anda ingin mengetahui lebih lanjut tentang dalaman PHP, lihat contoh kod di bawah.
Contoh kod
// contoh1.php
$a = 1;
$b = 2;
$c = $a + $b;
echo $c;
Kod di atas akan menjadi Zend Compiler menyusun ke dalam opcode berikut.
bilangan ops: 5
disusun vars: !0 = $a, !1 = $b, !2 = $c
3 0 E > 1
4 1 TUGASAN !1, 2
5 2 TAMBAH !2, !0, !1
6 3 ECHO !2
7 4 > RETURN 1
Dalam opcode di atas, terdapat beberapa bit bendera yang menggambarkan opcode Proses pelaksanaan, seperti "E" menunjukkan bahawa opcode ini akan menghasilkan kesan sampingan dan sebagainya. Untuk penerangan bit bendera ini, anda boleh melihat dokumentasi rasmi PHP.
Anda boleh menggunakan arahan berikut untuk menukar kod di atas kepada opcode.
php -dextension=opcache.so -dvld.active=1 -dvld.execute=0 example1.php
Anda boleh menggunakan VLD (VLD ialah pemalam tafsiran opcode Zend, yang boleh memajukan dan memaparkan opcode PHP kod) pemalam. Lihat opcode yang dijana:
$ php -dextension=vld.so example1.php
Mencari titik masuk
Analisis cawangan dari kedudukan: 0
Pulangan ditemui
nama fail: /home/user/example1.php
nama fungsi: (null)
bilangan ops: 5
var terkumpul: !0 = $a, !1 = $b, !2 = $c
3 0 E > ; TUGAS !0, 1
4 1 TUGASAN !1, 2
5 2 TAMBAH !2, !0, !1
6 3 ECHO !2
4 > RETURN 1
$
Atas ialah kandungan terperinci Penjelasan terperinci tentang mekanisme operasi dan prinsip pelaksanaan teras PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!