ホームページ > バックエンド開発 > PHPチュートリアル > Zephir経由のPHP拡張開発の開始

Zephir経由のPHP拡張開発の開始

Jennifer Aniston
リリース: 2025-02-21 11:21:09
オリジナル
978 人が閲覧しました

Zephir経由のPHP拡張開発の開始

このチュートリアルでは、CおよびFortranに似た新しい言語:Zephirを使用してPHP拡張機能を作成する方法を説明します。 GitHubから完全なソースコードをダウンロードできます。以前にZephirの概念に触れたことがあるので、幅広い概要を取得することに興味がある場合は、以前の記事をご覧ください。

Zephirは、PHPのように見えるがネイティブCにコンパイルされるコードを作成できるハイブリッド言語と見なすことができます。つまり、拡張機能を作成して非常に効率的なコードを使用できます。

キーテイクアウト

Zephirでは、PHP開発者がPHPと同様の構文を使用して効率的な拡張機能を作成できますが、パフォーマンスを向上させるためにネイティブCにコンパイルされます。
    Zephir開発環境をセットアップするには、Linuxベースのシステムの推奨を備えたGCC、GNU Make、PHP Development Headers、RE2C、JSON-Cなどの特定のツールが必要です。
  • ZephirでPHP拡張機能を作成するプロセスには、プロジェクトの初期化、.Zepファイルのコードの書き込み、コードのコンパイル、および新しい拡張機能を含むようにPHP環境の構成が含まれます。
  • Zephirはパフォーマンスを高めるだけでなく、ソースコードを保護する方法も提供し、閉じたソースPHPアプリケーションの作成に適しています。
  • インストール
  • PHP拡張機能を構築してゼフィルを使用するには、次のことが必要になります。
  • gcc> = 4.x/clang> = 3.x/vc 9

gnuは3.81以降を作成します

PHP開発ヘッダーとツール

re2c 0.13以降
  • json-c
  • インストール手順はすべてのプラットフォームで異なるため、トピックがこれほど高度な記事を持つ記事を読んでいる場合、それらを取得する方法を知っていると思います。記録については、Zephirアプリを開発するためにLinuxベースのシステムを使用することをお勧めします。
  • すべての前提条件ソフトウェアを取得したら、GithubからZephirの最新バージョンをダウンロードしてから、Zephirインストーラーを実行してください。
  • 自動的にインストールする必要があります - Zephirヘルプを入力してみてください。動作していない場合は、「bin」ディレクトリをパス環境変数に追加します。私の場合:/home/duythien/app/zephir/bin、so:
  • 次のエクスポートコマンドを追加します

新しいパスの設定を確認してインストールをテストするには、次のように入力します。

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
ログイン後にコピー

コンパイル…

インストール…
拡張機能がインストールされました!

拡張機能= myApp.soをphp.ini
に追加します Webサーバーを再起動することを忘れないでください


ゼフィルは初期段階であるため、バグや問題に遭遇する可能性があることに注意してください。これをコンパイルしようとしたとき、うまくいきませんでした。次のコマンドを試してみましたが、最終的には機能しました。

最後のコマンドは、PHP拡張機能フォルダーにモジュールをインストールします(私の場合:/usr/lib/php5/20121212/)。最後のステップは、次の行を追加して、この拡張機能をphp.iniに追加することです。

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;    

    }
}
ログイン後にコピー
さて、Zephir.php:

という新しいファイルを作成します

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);

    }
}
ログイン後にコピー

数学的に傾斜している場合は、gnuplotをインストールし、Zephir拡張から得た.txt出力で実行します:

このコマンドは、データファイルのharmos.txtを使用して画像を描画します。 Zephir経由のPHP拡張開発の開始

保護されたコード

場合によっては、コンピレーションはパフォーマンスを大幅に改善しません。これは、計算またはメモリの制限により、アプリケーションのI/Oバウンドにあるボトルネックのためではなく(非常に可能性が高い)ためです。ただし、コンパイルコードは、アプリケーションにある程度の知的保護をもたらす可能性もあります。 Zephirでネイティブバイナリを作成する場合、ユーザーまたは顧客からコードを隠すこともできます。Zephirでは、閉じたソースPHPアプリケーションを作成できます。

結論

この記事は、Zephirで拡張機能を作成する方法に関する基本的なガイドを示しました。 ZephirはPHPまたはCを置き換えるために作成されたのではなく、それらを補完するために作成され、開発者がコードコンピレーションと静的タイピングに挑戦できるようにしました。ゼフィルは、CとPHPの世界から最高のものに参加し、アプリケーションをより速く実行する試みであり、そのため、HHVMとハックとむしろ直接競合します。

Zephirの詳細については、オンラインドキュメントをご覧ください。この記事を楽しんでいましたか?コメントでお知らせください!

Zephir

経由のPHP拡張開発に関するよくある質問

Zephirとは何ですか?なぜPHP拡張開発で使用されているのですか?

Zephirは、PHP拡張機能を簡単かつ効率的に作成するために設計された高レベルのオープンソースプログラミング言語です。 PHP拡張開発で使用されているため、PHPと同様の構文を提供し、PHP開発者がCの複雑さを学習せずに拡張を作成しやすくなり、PHP拡張に通常使用されます。 Zephirはまた、メモリの安全性とパフォーマンスの最適化を提供し、結果として生じる拡張機能をより信頼性と速くします。あなたのローカルマシン。クローニング後、クローン化されたディレクトリに移動し、インストールコマンドを実行します。 Zephirには、PHP開発ヘッダーやCコンパイラなどの特定の依存関係が必要であることに注意することが重要です。インストールプロセスを開始する前に、これらがインストールされていることを確認してください。PHP拡張開発にZephirを介してZephirを使用することの利点は何ですか?

Cは強力な言語ですが、特にそれをよく知らない開発者にとっては複雑で使用が困難です。一方、Zephirは、PHP開発者にシンプルで馴染みのある構文を提供します。また、メモリ管理を自動的に処理し、メモリリークのリスクを軽減します。さらに、Zephirには、結果の拡張機能をより速く実行できるようにするパフォーマンスの最適化が含まれています。

以上がZephir経由のPHP拡張開発の開始の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート