国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ バックエンド開(kāi)発 PHPチュートリアル PHP拡張開(kāi)発ノート(1)クラスの配列屬性を作成する

PHP拡張開(kāi)発ノート(1)クラスの配列屬性を作成する

Aug 08, 2016 am 09:23 AM
declare property zend

以下のコードのように、クラスを初期化するのは非常に簡(jiǎn)単です
MYCLASS_PROTERTY_* これはdefine

<code>zend_class_entry *myclass_ce;

zend_function_entry myclass_methods[] = {
    PHP_FE_END
};

PHP_MINIT_FUNCTION(myext)
{

    zend_class_entry ce;

    INIT_CLASS_ENTRY(ce, <span>"MyClass"</span>, myclass_methods);
    myclass_ce = zend_register_internal_class(&ce TSRMLS_CC);

    zend_<span>declare</span>_class_constant_string(myclass_ce, ZEND_STRL(MYCLASS_PROTERTY_NAME_VERSION), PHP_SLIM_VERSION);
    zend_<span>declare</span>_property_null(myclass_ce, ZEND_STRL(MYCLASS_PROTERTY_NAME_CONTAINER), ZEND_ACC_PUBLIC TSRMLS_CC);
    zend_<span>declare</span>_property_null(myclass_ce, ZEND_STRL(MYCLASS_PROTERTY_NAME_APPS), ZEND_ACC_STATIC|ZEND_ACC_PROTECTED TSRMLS_CC);
    zend_<span>declare</span>_property_null(myclass_ce, ZEND_STRL(MYCLASS_PROTERTY_NAME_NAME), ZEND_ACC_PROTECTED TSRMLS_CC);
    zend_<span>declare</span>_property_null(myclass_ce, ZEND_STRL(MYCLASS_PROTERTY_NAME_ERROR), ZEND_ACC_PROTECTED TSRMLS_CC);
    zend_<span>declare</span>_property_null(myclass_ce, ZEND_STRL(MYCLASS_PROTERTY_NAME_NOTFOUND), ZEND_ACC_PROTECTED TSRMLS_CC);
    zend_<span>declare</span>_property_null(myclass_ce, ZEND_STRL(MYCLASS_PROTERTY_NAME_MIDDLEWARE), ZEND_ACC_PROTECTED TSRMLS_CC);

    <span>return</span> SUCCESS;
}</code>

のマクロ文字列に関連しています。上記のコードはすべて単純なプロパティです。
myclass クラスの配列屬性を初期化しようとしたときに失敗しました。PHP に関するコードは次のとおりです

<code><span><span>class</span><span>MyClass</span> {
    public $myArray = array<span>()</span>;
}


/* 對(duì)應(yīng)的<span>C</span>代碼 */

zval *myArray;
<span>MAKE_STD_ZVAL</span><span>(<span>myArray</span>)</span>;
array_init<span>(<span>myArray</span>)</span>;

zend_declare_property<span>(<span>myclass_ce</span>, <span>ZEND_STRL(MYCLASS_PROTERTY_NAME_MYCLASS)</span>, <span>myArray</span>, <span>ZEND_ACC_PUBLIC</span><span>TSRMLS_CC</span>)</span>;</span></code>

上記の C コードを変更したところ、new MyClass() が実行されたときに問(wèn)題は見(jiàn)つかりませんでした。 、エラーは次のとおりです:

<code>Internal zval<span>'s</span> can<span>'t</span> be arrays, objects <span>or</span> resources</code>

次のようにzendのソースコードを見(jiàn)てください:

<code><span>if</span> (ce-><span><span>type</span> & <span>ZEND_INTERNAL_CLASS</span>) <span>{
     <span>switch</span>(<span>Z_TYPE_P(property)</span>) {
         <span>case</span><span>IS_ARRAY</span>:
         <span>case</span><span>IS_CONSTANT_ARRAY</span>:
         <span>case</span><span>IS_OBJECT</span>:
         <span>case</span><span>IS_RESOURCE</span>:
             <span>zend_error</span>(<span>E_CORE_ERROR</span>, "<span>Internal</span><span>zval's</span><span>can't</span><span>be</span><span>arrays</span>, <span>objects</span><span>or</span><span>resources</span>");
             <span>break</span>;
         <span>default</span>:
             <span>break</span>;
     }</span></span>
 }</code>

zend_register_internal_classを呼び出すと、myclass_ceはZEND_INTERNAL_CLASSに初期化されており、このときのzend_declare_propertyのmyArrayパラメータはタイプIS_ARRAYです。このエラーが発生しました。

なぜこのようなエラーが発生するのでしょうか?

検索後に得られた結(jié)果は次のとおりです: http://grokbase.com/t/php/php-internals/07a4b14xvb/php-dev-how-declare-protected-array-property-at-internal-class-properly thisこれは 2007 年の結(jié)果です。私は PHP5.4 バージョンを使用していますが、當(dāng)分の間はまだこの問(wèn)題が発生しています。この記事では、コンストラクターに実裝することで、配列屬性を偽裝して実裝する方法も紹介しています。

<code>PHP_METHOD(myclass, __construct) {
    zval <span>*apps</span>, <span>*pThis</span>;
    pThis = getThis();
    MAKE_STD_ZVAL(apps);
    array_init(apps);
    add_property_zval_ex(pThis, ZEND_STRL(SLIM_SLIM_PROTERTY_NAME_APPS), apps);
}</code>

この実裝に対応するPHPコード

<code><span><span>class</span><span>MyClass</span> {</span><span><span>function</span><span>__construct</span><span>()</span> {</span><span>$this</span>->app = <span>array</span>();  
    }
}</code>

以上、PHP拡張開(kāi)発メモ(1)作成したクラスの配列屬性について紹介しましたが、PHPチュートリアルに興味のある友人の參考になれば幸いです。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP への解決策 注意: 未定義のプロパティ: PHP への解決策 注意: 未定義のプロパティ: Jun 22, 2023 pm 02:48 PM

PHP でコードを作成するときに、「通知: 未定義のプロパテ?!工趣いΕē椹` メッセージが表示される場(chǎng)合があります。このエラーは、未定義のプロパティにアクセスしていることを意味します。通常、そのプロパティがコード內(nèi)で初期化されていないことが原因です。では、この問(wèn)題をどうやって解決すればよいでしょうか?考えられる解決策は次のとおりです。 プロパティを初期化する これは、この問(wèn)題を解決する最も簡(jiǎn)単な方法です。コード內(nèi)でプロパティを明示的に初期化すると、使用前にプロパティが確実に定義されます。例: クラス

Oracle Declareの用途は何ですか Oracle Declareの用途は何ですか Sep 15, 2023 pm 01:12 PM

Oracle の宣言の使用には、変數(shù)宣言、定數(shù)宣言、カーソル宣言、およびサブルーチン宣言が含まれます。詳細(xì)な紹介: 1. 変數(shù)宣言、PL/SQL ブロックでは、DECLARE 文を使用して変數(shù)を宣言できます; 2. 定數(shù)は、PL/SQL ブロックで宣言された変更不可能な値です; 3. PL/SQL で使用されるカーソル宣言クエリ結(jié)果セットはブロック內(nèi)で処理されます; 4. サブルーチン宣言. サブルーチンは、PL/SQL ブロック內(nèi)で定義された再利用可能なコード ブロックです。

PHP 注意: 非オブジェクトのプロパティを取得しようとしています - 解決策 PHP 注意: 非オブジェクトのプロパティを取得しようとしています - 解決策 Aug 17, 2023 am 09:27 AM

PHP Notice: Tryingtogetpropertyofnon-object-Solution PHP 開(kāi)発プロセス中に、「Tryingtogetpropertyofnon-object (非オブジェクトのプロパティを取得しようとしています)」という一般的なエラー メッセージが表示されることがあります。このエラーは通常、オブジェクト型ではない変數(shù)のプロパティにアクセスしようとした (またはメソッドを呼び出した) ときに発生します。この記事ではこれについて紹介します

PHP 実裝フレームワーク: Zend Framework 入門(mén)チュートリアル PHP 実裝フレームワーク: Zend Framework 入門(mén)チュートリアル Jun 19, 2023 am 08:09 AM

PHP 実裝フレームワーク: ZendFramework 入門(mén)チュートリアル ZendFramework は、PHP によって開(kāi)発されたオープン ソースの Web サイト フレームワークであり、現(xiàn)在 ZendTechnologies によって保守されています。ZendFramework は、MVC デザイン パターンを採(cǎi)用し、Web2.0 アプリケーションと Web サーブの実裝に役立つ一連の再利用可能なコード ライブラリを提供します。 。 ZendFramework は PHP 開(kāi)発者に非常に人気があり、尊敬されており、幅広い機(jī)能を備えています。

Zend Framework でのアクセス許可制御に ACL (アクセス コントロール リスト) を使用する方法 Zend Framework でのアクセス許可制御に ACL (アクセス コントロール リスト) を使用する方法 Jul 29, 2023 am 09:24 AM

Zend Framework でのアクセス許可制御に ACL (AccessControlList) を使用する方法 はじめに: Web アプリケーションでは、アクセス許可制御は重要な機(jī)能です。これにより、ユーザーはアクセスを許可されたページと機(jī)能にのみアクセスできるようになり、不正アクセスが防止されます。 Zend フレームワークは、ACL (AccessControlList) コンポーネントを使用してアクセス許可制御を?qū)g裝する便利な方法を提供します。この記事では、Zend Framework で ACL を使用する方法を紹介します。

TypeError: Vue で null のプロパティ 'XXX' を読み取れません。どうすればよいですか? TypeError: Vue で null のプロパティ 'XXX' を読み取れません。どうすればよいですか? Nov 25, 2023 pm 01:21 PM

Vue は、ユーザー インターフェイスを構(gòu)築するための人気のある JavaScript フレームワークです。開(kāi)発プロセス中に、さまざまなエラーや例外が発生することがあります。よくあるエラーの 1 つは、「TypeError:Cannotreadproperty'XXX'ofnull」です。この記事では、このエラーの原因とその修正方法について説明します。まず、このエラーの背後にある理由を理解しましょう。オブジェクトのプロパティまたはメソッドにアクセスしようとすると、そのペアが

TypeError: Vue で未定義のプロパティ 'XXX' を読み取れません。どうすればよいですか? TypeError: Vue で未定義のプロパティ 'XXX' を読み取れません。どうすればよいですか? Nov 25, 2023 am 10:56 AM

TypeError:Vue で定義されていないプロパティ 'XXX' を読み取れません。どうすればよいですか? Vue を使用して開(kāi)発するフロントエンド開(kāi)発者は、開(kāi)発プロセス中に TypeError:Cannotreadproperty'XXX'ofunknown エラーに遭遇することがよくあります。このエラーは通常、未定義のプロパティにアクセスしようとしたときに発生します。存在する

PHP が ZendOptimizer を認(rèn)識(shí)しないのですが、どうすれば解決できますか? PHP が ZendOptimizer を認(rèn)識(shí)しないのですが、どうすれば解決できますか? Mar 19, 2024 pm 01:09 PM

PHP が ZendOptimizer を認(rèn)識(shí)しないのですが、どうすれば解決できますか? PHP 開(kāi)発では、PHP が ZendOptimizer を認(rèn)識(shí)できない狀況が発生し、一部の PHP コードが正しく実行されなくなることがあります。この場(chǎng)合、問(wèn)題を解決するために何らかの措置を講じる必要があります??激à椁欷毪い膜位乇懿撙?、具體的なコード例とともに以下に説明します。 1. ZendOptimizer が正しくインストールされているかどうかを確認(rèn)します。まず、ZendOptimizer が正しくインストールされていることを確認(rèn)する必要があります。

See all articles