ホームページ  >  記事  >  バックエンド開発  >  PHPインスタンス解析stdClassクラス

PHPインスタンス解析stdClassクラス

伊谢尔伦
伊谢尔伦オリジナル
2017-06-30 10:18:09987ブラウズ

この記事では、主に PHP ソース コードの分析の観点から stdClass クラスについて詳しく紹介し、必要な友人が参照できるように stdClass クラスが何であるかをまとめています

Baidu 百科事典では、stdClass の定義は次のとおりです。以下:

stdClass は PHP5 でのみ普及しました。 stdClass も zend の予約クラスです。 stdClass は PHP の基本クラスです

ほぼすべてのクラスがこのクラスを継承するため、いつでも新しいクラスになる可能性があり、この変数はオブジェクトになる可能性があります。同時に、この基本クラスには別の特別な特徴があります。それは、メソッドがありません。 new stdClass() を使用する変数は、$a->test() では使用されません。 PHP5 の
オブジェクト
のユニークな点は、オブジェクトがどこからでも呼び出されるとき、 は参照アドレス型であるため、消費するリソースが少ないことです。他のページで値を割り当てると、コピーを参照するのではなく、値が直接変更されます。
上記の定義のほとんどは正しいですが、致命的な診断エラーがあります。stdClass は PHP の基本クラスであり、ほとんどすべてのクラスがこのクラスを継承します。 簡単な例を見てください:

class EmptyClass {
}
$object = new EmptyClass();
if ($object instanceof stdClass) {
    echo 'yes';
}else{
    echo 'no';
}

はコードを実行し、「no」を出力します。この例は、stdClass クラスがすべてのクラスの基本クラスではないことを十分に示しています。これは単なる PHP の予約クラス、または strlen 関数に似た役割です。 ソース コードの観点から stdClass クラスの実装を見てみましょう。その登録場所は Zend/zend_buildin_functions.c ファイルです。以下の通り:

ZEND_MINIT_FUNCTION(core) { /* {{{ */
    zend_class_entry class_entry;
    /* 注册stdClass 类 */
    INIT_CLASS_ENTRY(class_entry, "stdClass", NULL);
    zend_standard_class_def = zend_register_internal_class(&class_entry TSRMLS_CC);
    /* 注册默认类,接口,如Exception类,SPL中的一些类等 */
    zend_register_default_classes(TSRMLS_C);   
    return SUCCESS;
}
/* }}} */

これは zend_builtin_module のモジュール初期化関数です。この関数は、PHP カーネルがモジュール初期化操作を実行するときに自動的にロードされ、stdClass クラスの登録操作も実行されます。このコードからわかるように、stdClass クラスはメンバー変数や

メンバー メソッド

を持たないクラスです。 すべての マジック メソッド、親クラス、インターフェイスなどは、初期化中に NULL に設定されます。 PHP ではメソッドをクラスに動的に追加できないため、このクラスは動的属性を処理するためにのみ使用できますが、これも一般的な使用法です。 要約:

stdClass は、PHP の内部予約クラスです。最初は、変数パラメーターを渡すために使用できるメンバー変数やメンバー メソッドはありません。呼び出すことができるメソッド。 stdClass クラスは継承できますが、継承する意味はほとんどありません。

以上がPHPインスタンス解析stdClassクラスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。