Zephirは、PHPのように見えるがネイティブCにコンパイルされるコードを作成できるハイブリッド言語と見なすことができます。つまり、拡張機能を作成して非常に効率的なコードを使用できます。
キーテイクアウト
re2c 0.13以降
新しいパスの設定を確認してインストールをテストするには、次のように入力します。
Zephirの基本と構文について、そしてそのタイピングシステムについて知ることができ、そのウェブサイトでいくつかのデモスクリプトを見ることができます。 Zephirを使用したプログラミング
<span>git clone https://github.com/phalcon/zephir </span><span>cd zephir && ./install -c</span>
ここで、Zephirを使用して、CとFortranが非常にうまく処理する数学的方程式を作り直します。この例はむしろ難解であり、ゼフィルの力を示すことを除いて、あまり詳細に説明されません。
時間依存のシュロディンガー方程式は、有限差で解かれましたvi $HOME/.bash_profile
時間依存のシュレディンガー方程式は、暗黙的(大きなマトリックス)と明示的な(跳躍)方法の両方で解決できます。明示的な方法を使用します。
まず、次のコマンドを発行して、拡張機能のスケルトンを作成します。
このコマンドが完了すると、「MyApp」と呼ばれるディレクトリが現在の作業ディレクトリに作成されます。これは次のように見えます:<span>git clone https://github.com/phalcon/zephir </span><span>cd zephir && ./install -c</span>
「MyApp」フォルダー内で、「Quantum.Zep」と呼ばれるファイルを作成します(MyAppQuantumネームスペースが表示されます)。コピーして、次のコードを内部に貼り付けます:
vi $HOME/.bash_profile
Fopen()、Sin()、fprintf()などの多くのPHP関数を使用しています。構文を自由に研究してください。また、もう1つの例を挙げます。 Phalcon PHPフレームワークを操作する過程で、ベトナムまたはドイツ語で作業している場合、機能Phalcontag :: FriendlyTitle()は無効です。この例は、上記の方程式よりもはるかに単純で、ファイルnormalizechars.zepを作成します。次のコードをファイルに挿入します:
export PATH=$PATH:/home/duythien/app/zephir/bin
今、私たちのプロジェクトをコンパイルし、拡張機能を生成する必要があることをゼフィルに伝える必要があります。
echo $PATH zephir help
初めて実行されたときに、このクラスをPHP拡張機能にエクスポートするために必要なコードと構成を生成する多くの内部コマンドが実行されます。すべてがうまくいけば、出力の終わりに次のメッセージが表示されます:
zephir init myapp
コンパイル…
インストール…拡張機能がインストールされました!最後のコマンドは、PHP拡張機能フォルダーにモジュールをインストールします(私の場合:/usr/lib/php5/20121212/)。最後のステップは、次の行を追加して、この拡張機能をphp.iniに追加することです。拡張機能= myApp.soをphp.ini
に追加します Webサーバーを再起動することを忘れないでください
ゼフィルは初期段階であるため、バグや問題に遭遇する可能性があることに注意してください。これをコンパイルしようとしたとき、うまくいきませんでした。次のコマンドを試してみましたが、最終的には機能しました。
apacheを再起動し、完了です。
myapp/ |-----ext/ |-----myapp/ |-----config.json
コードをテストします
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; } }
という新しいファイルを作成します
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); } }
数学的に傾斜している場合は、gnuplotをインストールし、Zephir拡張から得た.txt出力で実行します:
このコマンドは、データファイルのharmos.txtを使用して画像を描画します。
場合によっては、コンピレーションはパフォーマンスを大幅に改善しません。これは、計算またはメモリの制限により、アプリケーションのI/Oバウンドにあるボトルネックのためではなく(非常に可能性が高い)ためです。ただし、コンパイルコードは、アプリケーションにある程度の知的保護をもたらす可能性もあります。 Zephirでネイティブバイナリを作成する場合、ユーザーまたは顧客からコードを隠すこともできます。Zephirでは、閉じたソースPHPアプリケーションを作成できます。
結論Zephirの詳細については、オンラインドキュメントをご覧ください。この記事を楽しんでいましたか?コメントでお知らせください!
Zephir
経由のPHP拡張開発に関するよくある質問Cは強力な言語ですが、特にそれをよく知らない開発者にとっては複雑で使用が困難です。一方、Zephirは、PHP開発者にシンプルで馴染みのある構文を提供します。また、メモリ管理を自動的に処理し、メモリリークのリスクを軽減します。さらに、Zephirには、結果の拡張機能をより速く実行できるようにするパフォーマンスの最適化が含まれています。
以上がZephir経由のPHP拡張開発の開始の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。