2012-03-27 10 views
4

私はかなり長い時間PHP開発者でしたが、言語内でいくつかの制限を打ち始めるようになりました。だから、私は開発サイクルの次のステップはC++に移行し、いくつかの拡張を構築することだと考えました!なぜphpの拡張開発はC++の開発と大きく異なるのですか?

私はチュートリアルのようないくつかの標準的な "Hello World"を使いましたので、すべてが大部分の意味をなさないようです。私はかなりまともなチック - タック - トウのアプリケーションを構築したので、私はそれがPECLに潜入し、どのように動作しているかを見る時間だと思った。私が見つけたものは、私の心を吹き飛ばします。

PHP_FUNCTION(helloWorld) 
{ 
    RETURN_STRING("Hello World"); 
} 

本の線に沿っていない以上です:

は、誰もがこのような何かがなぜ目的と推理の両方を説明していただけます私は私を装っていないよ

string helloWorld() 
{ 
    return "Hello World" 
} 

PHP_REGISTER_METHOD("helloWorld"); 

言語を作った人以上のことを知っている、私は何かトラブルを扇動しようとしていない。初心者の観点から見ると、PHP拡張を作成するのはC++プログラムを作成するようなものではないようです。いくつかの基本的な構文規則を除いて、ほぼ完全に別の言語です。

ご協力いただければ幸いです。初心者が成長しようとしています:)

+3

おそらく、PHP_FUNCTIONとRETURN_STRINGは「フードの下に」あるマクロです。 – Konrad

+4

phpはメタデータ全体の中にすべてのビットのデータをラップします。 register_string()のような独自の関数はすべてあなたのためにそれを扱います。 –

+3

私は軽視したくはありませんが、実際のプログラムをC++で作成しているか、既存のコードベースが大規模な現実のC++プログラムで作業していますか? – NullUserException

答えて

6

PHP拡張開発は他のC/C++開発とそれほど違いはありません。特殊な唯一のことは、C/C++関数でPHPスクリプティングの世界とインターフェースする必要があることです。この作業は簡単ではなく、ここではPHP_FUNCTIONなどの奇妙なマクロが必要です。

たとえば、PHPから関数 "helloWorld"を呼び出す場合、インタープリタは "helloWorld"を検索してC関数にマップする必要があります。この関数は特定のシグネチャを持つ必要があります。つまり、特定のパラメータを受け入れる必要があり、ある値を返す必要があります。これは任意ではなく、インタプリタは単にC/C++関数を呼び出すことはできません。

これは、Cのような低レベル言語がどのように機能しているのかを「検査」することはできません。

特に、PHPインタープリタのすべての値は、C++型に変換できない特殊な構造体です。 PHPの文字列は、C++のstd :: stringとは異なるものです。 PHP APIには値を変換するためのあらゆる種類のツールが用意されていますが、その使い方を知っておく必要があります。

PHPから呼び出せるC関数の記述方法がわかったら、別のC/C++関数を呼び出してC/C++型を使用できる「C/C++ world」になります。ここからは、純粋なC/C++アプリケーションを書くことと同じです。さて、値をPHPの世界に戻さなければならないまで、PHP APIツールを再度使用する必要があります。

PHPや「純粋な」C++プロジェクトなどのスクリプト言語にインターフェイスするために必要な「グルーコード」を生成することで、人生を楽にするツールがあります。おそらく最も顕著な例であるSWIGを見てください。

+0

あなたには本当にありがとうございます:)私は読んでいる間少し精神的なクリックをしていました、と私はかなり確信しています今、私は分かる。 – syntaqx

関連する問題