Rumah >pembangunan bahagian belakang >tutorial php >Pembangunan Sambungan PHP dengan PHP-CPP: Kod Berorientasikan Objek
untuk menggambarkan keupayaan perpustakaan. Complex
ke yourtextension.ini
dan mengemas kini kandungannya ke complex.ini
. Ubah suai extension=complex.so
seperti berikut: Makefile
<code class="language-makefile">NAME = complex INI_DIR = /etc/php5/cli/conf.d</code>Seterusnya, kami akan menentukan kelas
dalam Complex
. main.cpp
Konsep Utama:
Complex
mod()
menunjukkan pendaftaran kaedah, yang membolehkan skrip PHP menggunakan fungsi kelas C secara langsung. add()
__toString()
Artikel ini menyediakan panduan lengkap untuk mengkonfigurasi, menyusun, dan menguji sambungan PHP. C menggunakan pembina (fungsi dengan nama kelas, tiada jenis pulangan) dan pemusnah (nama kelas yang diawali dengan
, tiada jenis pulangan, tiada parameter). PHP menggunakan dan ~
. PHP-CPP menyokong kedua-dua: __construct()
__destruct()
<code class="language-cpp">class Complex : public Php::Base { private: double r = 0, i = 0; public: Complex() {} virtual ~Complex() {} Php::Value getReal() { return r; } Php::Value getImage() { return i; } void __construct(Php::Parameters ¶ms) { if (params.size() == 2) { r = params[0]; i = params[1]; } else { r = 0; i = 0; } } // ... other methods ... };</code>
semua kelas mesti mewarisi dari
.Php::Base
getReal()
Pembina PHP mengendalikan permulaan. getImage()
mod()
Kaedah ini mengira modulus nombor kompleks:
ingat untuk memasukkan
untuk<code class="language-cpp">Php::Value mod() const { return (double)sqrt(r * r + i * i); }</code>. PHP-CPP menyokong tandatangan fungsi ahli tertentu (lihat artikel untuk butiran).
<cmath></cmath>
sqrt()
add()
Menambah dua nombor kompleks:
sangat penting untuk menghantar
<code class="language-cpp">Php::Value add(Php::Parameters ¶ms) { Php::Value t = params[0]; Complex *a = (Complex *)t.implementation(); r += (double)a->getReal(); i += (double)a->getImage(); return this; }</code>ke objek C yang mendasari.
t.implementation()
Php::Value
__toString()
untuk output mesra pengguna:
termasuk
untuk manipulasi rentetan.<code class="language-cpp">Php::Value __toString() { std::ostringstream os; os << r; if (i >= 0) os << "+"; os << i << "i"; return os.str(); }</code>
<sstream></sstream>
Pendaftaran fungsi:
mendaftarkan kelas dan kaedahnya:
Penyusunan, Pemasangan, dan Ujian:
<code class="language-cpp">extern "C" { PHPCPP_EXPORT void *get_module() { static Php::Extension myExtension("complex", "1.0"); Php::Class<complex> complex("Complex"); complex.method("mod", &Complex::mod, {}); complex.method("__construct", &Complex::__construct); complex.method("add", &Complex::add, {Php::ByVal("op", "Complex", false, true)}); myExtension.add(std::move(complex)); return myExtension; } }</complex></code>
Kompilasi dan pasang menggunakan . Uji dengan kod PHP (lihat artikel asal untuk contoh).
Encapsulation Namespace:
membungkus kelas dalam ruang nama (trComplex
dalam contoh ini) memerlukan perubahan minimum (lihat artikel asal untuk butiran). Kuncinya menyesuaikan ruang nama dalam fungsi get_module()
dan menggunakan nama yang berkelayakan sepenuhnya dalam kod PHP.
Kesimpulan:
PHP-CPP menawarkan pendekatan yang diperkemas untuk mewujudkan sambungan PHP. Walaupun penambahbaikan dokumentasi dicadangkan, kemudahan penggunaan dan ciri menjadikannya alat yang berharga. Artikel ini menyediakan panduan yang komprehensif, yang meliputi aspek penting pembangunan lanjutan PHP berorientasikan objek.
Atas ialah kandungan terperinci Pembangunan Sambungan PHP dengan PHP-CPP: Kod Berorientasikan Objek. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!