Rumah >pembangunan bahagian belakang >tutorial php >Bermula dengan Pembangunan Tambahan PHP melalui Zephir
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
gcc> = 4.x/clang> = 3.x/vc 9
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 helppengaturcaraan 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 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:
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:Compleish ...
Memasang ...
Pelanjutan dipasang!
Tambah lanjutan = myApp.so ke php.ini anda
Jangan lupa untuk memulakan semula pelayan web anda
myapp/ |-----ext/ |-----myapp/ |-----config.jsonPerintah 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
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:
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
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.
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!
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.
Atas ialah kandungan terperinci Bermula dengan Pembangunan Tambahan PHP melalui Zephir. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!