Rumah >pembangunan bahagian belakang >tutorial php >Bermula dengan Pembangunan Tambahan PHP melalui Zephir

Bermula dengan Pembangunan Tambahan PHP melalui Zephir

Jennifer Aniston
Jennifer Anistonasal
2025-02-21 11:21:09995semak imbas

Bermula dengan Pembangunan Tambahan PHP melalui Zephir

Tutorial ini akan menerangkan cara membuat sambungan PHP menggunakan bahasa baru: Zephir, yang serupa dengan C dan Fortran. Anda boleh memuat turun kod sumber penuh dari GitHub. Kami telah menyentuh konsep Zephir sebelum ini, jadi jika anda berminat untuk mendapatkan gambaran yang luas, lihat artikel kami yang terdahulu.

Zephir boleh dilihat sebagai bahasa hibrid yang membolehkan anda menulis kod yang kelihatan seperti PHP, tetapi kemudian disusun kepada Cative C, yang bermaksud anda boleh membuat lanjutan daripadanya dan pergi dengan kod yang sangat efisien.

Takeaways Key

    Zephir membolehkan pemaju PHP menulis sambungan yang cekap menggunakan sintaks yang serupa dengan PHP tetapi disusun kepada C asli untuk prestasi yang dipertingkatkan.
  • Untuk menubuhkan persekitaran pembangunan zephir, anda memerlukan alat tertentu seperti GCC, GNU Make, Headers Development PHP, RE2C, dan JSON-C, dengan cadangan untuk sistem berasaskan Linux.
  • Proses membuat lanjutan PHP di Zephir melibatkan permulaan projek, menulis kod dalam fail .zep, menyusun kod, dan mengkonfigurasi persekitaran PHP anda untuk memasukkan lanjutan baru.
  • Zephir bukan sahaja meningkatkan prestasi tetapi juga menawarkan cara untuk melindungi kod sumber, menjadikannya sesuai untuk membuat aplikasi php sumber tertutup.
  • Pemasangan

Untuk membina lanjutan PHP dan gunakan zephir, anda perlu yang berikut:

gcc> = 4.x/clang> = 3.x/vc 9
    gnu membuat 3.81 atau lebih baru
  • pengepala dan alat pembangunan php
  • re2c 0.13 atau lebih baru
  • JSON-C
  • Arahan pemasangan berbeza -beza untuk setiap platform, jadi saya percaya anda akan tahu bagaimana untuk mendapatkannya jika anda membaca artikel dengan topik yang maju seperti ini. Untuk rekod - saya cadangkan menggunakan sistem berasaskan Linux untuk membangunkan aplikasi zephir.
Sebaik sahaja anda memperoleh semua perisian prasyarat, muat turun versi terkini Zephir dari GitHub, kemudian jalankan pemasang Zephir, seperti SO:

Ia harus dipasang secara automatik - cuba menaip bantuan zephir. Jika ia tidak berfungsi, tambahkan direktori "bin" ke pemboleh ubah jalan anda. Dalam kes saya:/rumah/duythien/app/zephir/bin, seperti SO:

<span>git clone https://github.com/phalcon/zephir
</span><span>cd zephir && ./install -c</span>

Masukkan perintah eksport berikut:

vi $HOME/.bash_profile

untuk mengesahkan tetapan laluan baru dan menguji pemasangan, masukkan:

export PATH=$PATH:/home/duythien/app/zephir/bin

Anda boleh mengetahui tentang asas dan sintaks Zephir, serta sistem menaipnya dan melihat beberapa skrip demo di laman web mereka.

echo $PATH
zephir help
pengaturcaraan dengan zephir

Sekarang kita akan menggunakan Zephir untuk mengerjakan semula persamaan matematik yang C dan Fortran mengendalikan dengan baik. Contohnya agak esoterik dan tidak akan dijelaskan dengan terperinci, kecuali untuk menunjukkan kuasa Zephir.

persamaan schrodinger yang bergantung kepada masa diselesaikan dengan perbezaan terhingga

Persamaan Schrödinger yang bergantung kepada masa dapat diselesaikan dengan kaedah tersirat (matriks besar) dan eksplisit (leapfrog). Saya akan menggunakan kaedah eksplisit.

Pertama, mengeluarkan arahan berikut untuk membuat rangka lanjutan:

<span>git clone https://github.com/phalcon/zephir
</span><span>cd zephir && ./install -c</span>

Apabila arahan ini selesai, direktori yang dipanggil "myApp" dibuat pada direktori kerja semasa. Ini kelihatan seperti:

vi $HOME/.bash_profile

Di dalam folder "MyApp", buat fail yang dipanggil "Quantum.zep" (yang akan memberi kita ruang nama MyAppquantum). Salin tampal kod berikut di dalam:

export PATH=$PATH:/home/duythien/app/zephir/bin

Kami telah menggunakan banyak fungsi PHP seperti fopen (), sin (), fprintf (), dan lain -lain - berasa bebas untuk mengkaji sintaks. Saya juga akan memberi anda satu lagi contoh. Dalam proses bekerja dengan kerangka Phalcon PHP, fungsi PhalContag :: FriendlyTitle () tidak sah jika anda bekerja di Vietnam atau Jerman. Contoh ini, jauh lebih mudah daripada persamaan di atas, mewujudkan fail normalizechars.zep. Masukkan kod berikut ke dalam fail:

echo $PATH
zephir help

Sekarang, kita perlu memberitahu Zephir bahawa projek kami mesti disusun dan lanjutan yang dihasilkan:

zephir init myapp

Pada kali pertama ia menjalankan beberapa perintah dalaman dilaksanakan menghasilkan kod dan konfigurasi yang diperlukan untuk mengeksport kelas ini ke lanjutan PHP. Sekiranya semuanya berjalan lancar, anda akan melihat mesej berikut pada akhir output:

Compleish ... Memasang ...
Pelanjutan dipasang!
Tambah lanjutan = myApp.so ke php.ini anda
Jangan lupa untuk memulakan semula pelayan web anda

Perhatikan bahawa sejak Zephir akan berada di peringkat awal, ia mungkin untuk mengalami pepijat dan masalah. Kali pertama saya cuba menyusun ini ia tidak berfungsi. Saya mencuba arahan berikut dan akhirnya berjaya:

myapp/
 |-----ext/
 |-----myapp/
 |-----config.json
Perintah terakhir akan memasang modul dalam folder PHP Extensions (dalam kes saya:/usr/lib/php5/20121212/). Langkah terakhir adalah untuk menambah pelanjutan ini ke php.ini anda dengan menambahkan baris berikut:

namespace Myapp;
class Quantum{

    const PI = 3.14159265358979323846;
    const MAX = 751;

    public function Harmos(double x){
        int  i,j,n;
        var  psr, psi, p2, v,paramater,fp;
        double dt,dx,k0,item_psr,item_psi;

        let dx = 0.02,
            k0 = 3.0*Myapp\Quantum::PI,
            dt = dx*dx/4.0;
        let paramater =[dx,k0,dt,x];
        let i   = 0,
            psr = [],
            psi = [],
            p2  = [],
            v   = [],
            fp  = [];           

        let fp = fopen ("harmos.txt", "w");
            if (!fp) {
            return false;
            }
        while i <= Myapp\Quantum::MAX{
            let item_psi = sin(k0*x) / exp(x*x*2.0),
                item_psr = cos(k0*x) / exp(x*x*2.0);
            let psr[i] = [item_psr],
                psi[i] = [item_psi],
                v[i] = [5.0*x*x],   
                x = x + dx,
                i++;
        }
        var tmp; 
        let i =1, j=1,tmp=[2.0];
        for n in range(0, 20000){

            for i in range(1,Myapp\Quantum::MAX - 1 ){
                let psr[i][3] =psr[i][0] - paramater[2]*(psi[i+1][0] + psi[i - 1][0]
                            - tmp[0]*psi[i][0]) / (paramater[0]*paramater[0]) + paramater[2]*v[i][0]*psi[i][0],

                p2[i] = psr[i][0]*psr[i][4] + psi[i][0]*psi[i][0];
            }
            for j in range(1,Myapp\Quantum::MAX - 1 ) {
                let psr[0][5] = 0,
                    psr[Myapp\Quantum::MAX][6]= 0 ;
                let psi[j][7] = psi[j][0] + paramater[2]*(psr[j+1][8] + psr[j - 1][9]
                             - tmp[0]*psr[j][10]) / (paramater[0]*paramater[0]) - paramater[2]*v[j][0]*psr[j][11];
            }
        //output split
        if (n ==0 || n % 2000 == 0) {
            let i =1;
            while i < Myapp\Quantum::MAX - 1 {
            fprintf(fp, "%16.8lf %16.8lf %16.8lf \n",i*dx,n*dt,p2[i]);
                let i = i + 10;
            }
            fprintf(fp, "\n");
        }
        // change new->old
        let j = 1;
        while j <  Myapp\Quantum::MAX - 1 {
                let psi[j][0] = psi[j][12],
                    psr[j][0] = psr[j][13];
                let j++;
        }

    }
    return true;    

    }
}
mulakan semula Apache, dan kami sudah selesai.

Uji kod

Sekarang, buat fail baru yang dipanggil zephir.php:

namespace Myapp;

class NormalizeChars{
    public function trans(var s)
    {
            var replace;
        let replace = [
            "ế" : "e",
            "ề" : "e",
            "ể" : "e",
            "ễ" : "e",
            "ệ" : "e",
            //--------------------------------E^
            "Ế" : "e",
            "Ề" : "e",
            "Ể" : "e",
            "Ễ" : "e",
            "Ệ" : "e",
            //--------------------------------e
            "é" : "e",
            "è" : "e",
            "ẻ" : "e",
            "ẽ" : "e",
            "ẹ" : "e",
            "ê" : "e",
            //--------------------------------E
            "É" : "e",
            "È" : "e",
            "Ẻ" : "e",
            "Ẽ" : "e",
            "Ẹ" : "e",
            "Ê" : "e",
            //--------------------------------i
            "í" : "i",
            "ì" : "i",
            "ỉ"  : "i",
            "ĩ" : "i",
            "ị" : "i",
            //--------------------------------I
            "Í" : "i",
            "Ì" : "i",
            "Ỉ"  : "i",
            "Ĩ" : "i",
            "Ị" : "i",
            //--------------------------------o^
            "ố" : "o",
            "ồ" : "o",
            "ổ" : "o",
            "ỗ" : "o",
            "ộ" : "o",
            //--------------------------------O^
            "Ố"  : "o",
            "Ồ" : "o",
            "Ổ"  : "o",
            "Ô" : "o",
            "Ộ"  : "o",
            //--------------------------------o*
            "ớ"  : "o",
            "ờ" : "o",
            "ở"  : "o",
            "ỡ" : "o",
            "ợ"  : "o",
            //--------------------------------O*
            "Ớ"  : "o",
            "Ờ" : "o",
            "Ở"  : "o",
            "Ỡ" : "o",
            "Ợ"  : "o",
            //--------------------------------u*
            "ứ"  : "u",
            "ừ" : "u",
            "ử"  : "u",
            "ữ" : "u",
            "ự"  : "u",
            //--------------------------------U*
            "Ứ"  : "u",
            "Ừ" : "u",
            "Ử"  : "u",
            "Ữ" : "u",
            "Ự"  : "u",
            //--------------------------------y
            "ý"  : "y",
            "ỳ" : "y",
            "ỷ"  : "y",
            "ỹ" : "y",
            "ỵ"  : "y",
            //--------------------------------Y
            "Ý"  : "y",
            "Ỳ" : "y",
            "Ỷ"  : "y",
            "Ỹ" : "y",
            "Ỵ"  : "y",
            //--------------------------------DD
            "Đ"  : "d",
            "đ" : "d",
            //--------------------------------o
            "ó"  : "o",
            "ò" : "o",
            "ỏ"  : "o",
            "õ" : "o",
            "ọ"  : "o",
            "ô" : "o",
            "ơ"  : "o",
            //--------------------------------O
            "Ó"  : "o",
            "Ò" : "o",
            "Ỏ"  : "o",
            "Õ" : "o",
            "Ọ"  : "o",
            "Ô" : "o",
            "Ơ"  : "o",
            //--------------------------------u
            "ú"  : "u",
            "ù" : "u",
            "ủ"  : "u",
            "ũ" : "u",
            "ụ"  : "u",
            "ư" : "u",
            //--------------------------------U
            "Ú"  : "u",
            "Ù" : "u",
            "Ủ"  : "u",
            "Ũ" : "u",
            "Ụ"  : "u",
            "Ư" : "u",

            //--------------------------------a^
            "ấ"  : "a",
            "ầ" : "a",
            "ẩ"  : "a",
            "ẫ" : "a",
            "ậ"  : "a",
            //--------------------------------A^
            "Ấ"  : "a",
            "Ầ" : "a",
            "Ẩ"  : "a",
            "Ẫ" : "a",
            "Ậ"  : "a",
            //--------------------------------a(
            "ắ"  : "a",
            "ằ" : "a",
            "ẳ"  : "a",
            "ẵ" : "a",
            "ặ"  : "a",
            //--------------------------------A(
            "Ắ"  : "a",
            "Ằ" : "a",
            "Ẳ"  : "a",
            "Ẵ" : "a",
            "Ặ"  : "a",
            //--------------------------------A
            "Á"  : "a",
            "À" : "a",
            "Ả"  : "a",
            "Ã" : "a",
            "Ạ"  : "a",
            "Â" : "a",
            "Ă"  : "a",
            //--------------------------------a
            "ả"  : "a",
            "ã" : "a",
            "ạ"  : "a",
            "â" : "a",
            "ă"  : "a",
            "à" : "a",
            "á"  : "a"];
        return strtr(s, replace);

    }
}
Selesai dengan melawat halaman Zephir.php anda. Ia sepatutnya kelihatan sama dengan output berikut:

Bermula dengan Pembangunan Tambahan PHP melalui Zephir Jika anda bersekolah secara matematik, pasangkan gnuplot dan jalankan dengan output .txt yang kami dapat dari lanjutan zephir kami:

Perintah ini akan menarik imej menggunakan fail data harmos.txt, yang akan kelihatan seperti ini, membuktikan persamaan kami dikira dengan betul.
cd myapp
zephir build

kod yang dilindungi

Dalam beberapa kes, kompilasi tidak meningkatkan prestasi dengan ketara, mungkin kerana kesesakan yang terletak di I/O terikat aplikasi (kemungkinan besar) dan bukannya disebabkan oleh had dalam pengiraan atau ingatan. Walau bagaimanapun, kod penyusun juga boleh membawa beberapa tahap perlindungan intelektual kepada permohonan anda. Apabila menghasilkan binari asli dengan Zephir, anda juga boleh menyembunyikan kod dari pengguna atau pelanggan - Zephir membolehkan anda menulis aplikasi php sumber tertutup.

Kesimpulan

Artikel ini memberikan panduan asas tentang cara membuat sambungan di Zephir. Ingat, Zephir tidak dicipta untuk menggantikan PHP atau C, tetapi sebagai pelengkap kepada mereka, yang membolehkan pemaju menceburkan diri ke dalam kompilasi kod dan menaip statik. Zephir adalah percubaan untuk menyertai perkara terbaik dari dunia C dan PHP dan membuat aplikasi berjalan lebih cepat, dan dengan demikian bersaing secara langsung dengan HHVM dan Hack.

Untuk maklumat lanjut mengenai Zephir, lihat dokumentasi dalam talian. Adakah anda menikmati artikel ini? Beritahu saya dalam komen!

Soalan Lazim mengenai Pembangunan Sambungan PHP melalui Zephir

Apa itu Zephir dan mengapa ia digunakan dalam pembangunan lanjutan PHP? Ia digunakan dalam pembangunan lanjutan PHP kerana ia menyediakan sintaks yang serupa dengan PHP, menjadikannya lebih mudah bagi pemaju PHP untuk menulis sambungan tanpa perlu mempelajari kerumitan C, bahasa yang biasanya digunakan untuk sambungan PHP. Zephir juga menawarkan keselamatan ingatan dan pengoptimuman prestasi, menjadikan sambungan yang dihasilkan lebih dipercayai dan lebih cepat. mesin tempatan anda. Selepas pengklonan, navigasi ke direktori klon dan jalankan arahan pemasangan. Adalah penting untuk diperhatikan bahawa Zephir memerlukan kebergantungan tertentu seperti tajuk pembangunan PHP dan pengkompil C. Pastikan ini dipasang sebelum anda memulakan proses pemasangan.

Bagaimana saya membuat lanjutan PHP menggunakan Zephir? Pertama, anda perlu memulakan projek Zephir menggunakan arahan init. Ini mewujudkan struktur direktori untuk lanjutan anda. Seterusnya, anda menulis kod sambungan anda dalam fail .zep. Sebaik sahaja kod anda siap, anda boleh menyusunnya ke dalam pelanjutan PHP menggunakan arahan Compile. Akhirnya, anda perlu menambah lanjutan ke fail php.ini anda untuk membolehkannya.

Apakah faedah menggunakan zephir di atas C untuk pembangunan lanjutan PHP? Zephir, sebaliknya, menyediakan sintaks yang lebih mudah dan lebih biasa untuk pemaju PHP. Ia juga mengendalikan pengurusan memori secara automatik, mengurangkan risiko kebocoran memori. Di samping itu, Zephir termasuk pengoptimuman prestasi yang boleh membuat sambungan yang dihasilkan berjalan lebih cepat. . Walau bagaimanapun, pemajunya telah menyatakan minat untuk menambah sokongan untuk bahasa lain pada masa akan datang. Buat masa ini, jika anda ingin membuat sambungan untuk bahasa lain, anda perlu menggunakan alat atau bahasa yang berbeza. Selesai menggunakan pelbagai alat. Satu kaedah biasa ialah menggunakan lanjutan Zephir Parser, yang menyediakan mesej ralat terperinci dan dapat membantu anda mengenal pasti masalah dalam kod anda. Anda juga boleh menggunakan alat penyahpepijatan php standard seperti Xdebug, walaupun ini mungkin tidak memberikan banyak perincian untuk isu-isu khusus zephir. direka untuk menjadi sangat cekap, dan dalam banyak kes, sambungan yang ditulis dalam Zephir boleh lebih cepat daripada kod PHP yang setara. Ini kerana Zephir menyusun kepada C, yang merupakan bahasa peringkat rendah yang boleh dilaksanakan dengan lebih cepat oleh komputer. Walau bagaimanapun, perbezaan prestasi yang tepat boleh berbeza-beza bergantung kepada kod tertentu dan bagaimana ia digunakan. Dari masyarakat dialu -alukan. Sekiranya anda berminat untuk menyumbang, anda boleh menyemak projek di GitHub untuk melihat isu -isu yang sedang dibuka dan bantuan apa yang diperlukan. adalah beberapa sumber yang tersedia untuk pembelajaran Zephir. Dokumentasi Zephir rasmi adalah titik permulaan yang baik, memberikan panduan yang komprehensif untuk ciri dan penggunaan bahasa. Terdapat juga beberapa tutorial dan catatan blog yang tersedia dalam talian yang dapat memberikan pandangan dan contoh tambahan. Bahagian kritikal aplikasi PHP untuk prestasi. Ia juga digunakan apabila terdapat keperluan untuk berinteraksi dengan perpustakaan C, kerana Zephir boleh berfungsi sebagai jambatan antara PHP dan C. Selain itu, Zephir boleh digunakan untuk merangkum logik perniagaan yang kompleks dalam lanjutan PHP, menyediakan antara muka yang bersih dan cekap untuk aplikasi Kod.

Atas ialah kandungan terperinci Bermula dengan Pembangunan Tambahan PHP melalui Zephir. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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