untuk menggambarkan keupayaan perpustakaan. Complex
ke yourtextension.ini
dan mengemas kini kandungannya ke complex.ini
. Ubah suai extension=complex.so
seperti berikut: Makefile
NAME = complex INI_DIR = /etc/php5/cli/conf.d
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()
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 ... };
semua kelas mesti mewarisi dari
.Php::Base
getReal()
Pembina PHP mengendalikan permulaan. getImage()
mod()
Kaedah ini mengira modulus nombor kompleks:
ingat untuk memasukkan
untukPhp::Value mod() const { return (double)sqrt(r * r + i * i); }
<cmath>
sqrt()
add()
Menambah dua nombor kompleks:
sangat penting untuk menghantar
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; }
t.implementation()
Php::Value
__toString()
untuk output mesra pengguna:
termasuk
untuk manipulasi rentetan.Php::Value __toString() { std::ostringstream os; os << r; if (i >= 0) os << "+"; os << i << "i"; return os.str(); }
<sstream>
Pendaftaran fungsi:
mendaftarkan kelas dan kaedahnya:
Penyusunan, Pemasangan, dan Ujian:
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; } }
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!