問題タブ [php-internals]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - クラスメンバーとしての配列と参照カウント
私を混乱させるものがあります。Foo::$bar
コンストラクターで空の配列として初期化する必要があるクラス member があると
します。これを ( 経由でzend_update_property
) 行うと、refcount が増加します ( alloc +array_init
の後に取得する 1 から 2 に)。zend_update_property
の観点からすると、外の世界の somone から変数を取得し、それを ++ にするのは正しいため、なぜこれが起こるのかは明らかです。
しかし、この特定のケースでは、配列がコンストラクターで初期化されます。2 の refcount は必要ありません。オブジェクトによってのみ使用されるため (まだ)、1 が正しいです。
だからやろうと思っZ_DELREF_P()
た。そして、それはうまくいきました。valgrind を開始するまでは、次のように報告していました。
これは、エンジンがオブジェクトを破棄したときに発生します (オブジェクトが範囲外になると、デストラクタも呼び出されます)。
したがって、ZE は refcount を 2 にする必要があるようです。私が書いた他のすべてのテストは正常に動作し、memleaks も segfault もまったくありません。
それでも私は少し混乱しています:なぜそれは(私の理解から)あるべきよりも高くする必要があるのですか?
php - PHP拡張機能を使用してクラスから変数にアクセスする方法は?
私はubuntuの下でc ++で作業しています。次の例があります: [car.h]
/ [car.cc]
[vehicles.cc]
[php_vehicles.h]
[config.m4]
[test.php]
なぜ?これを解決するには?どうも !感謝
php - php拡張メソッドから文字列を返す方法は?
[example.cc]にメソッドがあります:
このメソッドをphp拡張機能から呼び出したい
私はこれを[test_php.cc]拡張子に書きました:
次のエラーがあります:
単純な呼び出しでreturn_string(..)_を変更した場合car->accelerate(s)
; それは動作します..それはreturn関数として何も出力しないのは本当です。助けが要る。感謝
php - PHP拡張メソッドが返されないのはなぜですか?
これが php_ex.cc です。.so ライブラリをコンパイルすると、retur() メソッドが機能しません。なぜ?エラーはありませんが、「テスト」と出力されるはずですが、そうではありません。助けが必要.THX
[php_ex.cc]
これが [example.cc] です。
クラス Car とそのメソッドが機能していることに言及したいと思います。
php-internals - Zend拡張、echoの引数を取得しますか?
zvalのエコーのアドレスを書き出すZend拡張機能を作成しましたが、エコーの「テスト」に違いがあることに気付いたため、それらを受信する方法がわかりません。および$a="テスト"; エコー$a;
変数であるかどうかに関係なく、どのように引数を取得しますか?
php - 拡張子の$_SERVERにエントリを追加します
PHP拡張内のスーパーグローバル$_SERVER-arrayにエントリを追加する必要があります。php_register_variable()
キーと値を引数として一時停止して、それでうまくいくと確信しています。しかし、私は3番目の引数として何を渡すのかわかりません。残念ながら、このトピックに関するドキュメントはかなりまばらです。
php - カスタム php 拡張機能のラップ
C ライブラリからカスタム php 拡張機能をラップしようとしていますが、特定のカスタム接続を開始する Initializer 関数があり、コストがかかるようで、関数を呼び出すたびに実行するべきではありません。
ZEND ラッパーに次のものがあるとします。
conn_init()
ここでは高価な呼び出しです。その関数をどこに配置すればよいですか?
また、ユーザーにconn_init()
PHP から呼び出すように依頼することはできますか?
c - zendカスタムモジュール
独自のzendモジュール(.so)を構築しようとしています
独自のモジュールで実行できる複数の機能があり、トラフィックの多いWebサイト(1日5万回以上の訪問)でのパフォーマンスが向上します。
これらは単純なモジュールですが、zendで使用される言語は似ているのだろうかと思いましたC
。
現在のCコードをZendコードに変換するのはどれくらい簡単ですか?
例:
ツリーにノードがいくつあるかを確認したい:
c - KDEプラットフォームでZendEngineを拡張する場合、gVIMは正しい選択ですか?
私は、KDE環境のZendEngineにいくつかの気の利いたクールな概念を紹介しようとしています。これは一種の「ディープコア」であり、ベテランのCコーディングと、適度に複雑なCコードベースのハッキングが必要です。
これまでのところ、大物はvimと、構文の強調表示からコード補完などまですべてを行う有名なプラグインのバンドルを使用してそれを行っていると思います。しかし、私が頭に浮かばないのは「プロジェクト」の概念です。 vimで。Vimはテキストエディタであるため、vimにプロジェクトの概念がないのは最も自然なことですが、多数のファイル間の(セマンティック)関係を理解しないエディタを使用して、複雑なcコードベースで作業できる可能性があります。コードベースは一貫性のある全体(=プロジェクト)ですか?私が言っていることの具体的な例を作るために、私が見ていると仮定します
これはにあり、で宣言されてfile1.c
いるに到達したいと思います。別の例として、「zend_」(プロジェクト全体のさまざまなファイルで定義)で始まるすべての関数が必要です。または、プロジェクト内の変数がアクセスされる場所を確認したい(「プロジェクト全体」の共通テーマに注意してください。私の例)。vimは私のためにこれらのちょっとしたことをすることができますか?zend_compile_file()
file2.c
私が取り組んでいるタスクにvimは正しい選択ですか?
php - PHPオペコードを作成して実行します。実行する方法?
PHPオペコードを記述してファイルに保存し、Zend Engineに実行させるにはどうすればよいですか?それがトリックを行う限り、どんな方法やハックも歓迎されます。