百度百科では、stdClass の定義は次のとおりです:
コードをコピーします コードは次のとおりです:
stdClass は PHP5 でのみ普及しました。 stdClass も zend の予約クラスです。 stdClass は PHP の基本クラスであり、ほとんどすべてのクラスがこのクラスを継承するため、いつでも新しいクラスになり、この変数はオブジェクトになる可能性があります。同時に、
この基本クラスには別の特別な機能があります。それは、メソッドがありません。 new stdClass() を使用する変数は、$a->test() では使用されません。 PHP5 オブジェクトのユニークな点は、オブジェクトがどこで呼び出されても参照アドレス型であるため、消費するリソースが比較的少ないことです。他のページで値を割り当てると、コピーを参照するのではなく、値が直接変更されます。
上記の定義のほとんどは正しいですが、致命的な診断エラーがあります。stdClass は PHP の基本クラスであり、ほぼすべてのクラスがこのクラスを継承します。 簡単な例を見てください:
コードをコピーします
コードは次のとおりです: class EmptyClass {
}
$object = new EmptyClass();
if ($objectinstanceof 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);
/* 例外クラス、SPL の一部のクラスなどのデフォルトのクラス、インターフェースを登録します。 */
zend_register_default_classes(TSRMLS_C);
return SUCCESS;
}
/* }}} */
これは zend_builtin_module のモジュール初期化関数です。この関数は、PHP カーネルがモジュールの初期化操作を実行するときに自動的にロードされ、stdClass クラスの登録操作も実行されます。このコードからわかるように、stdClass クラスはメンバー変数もメンバー メソッドも持たないクラスです。 すべてのマジック メソッド、親クラス、インターフェイスなどは、初期化中に NULL に設定されます。 PHP ではメソッドをクラスに動的に追加できないため、このクラスは動的属性を処理するためにのみ使用できますが、これも一般的な使用法です。
要約すると、
stdClass は、PHP の内部予約クラスです。初期状態では、すべてのマジック メソッドを使用して変数パラメータを渡すことができますが、呼び出し可能なクラスはありません。方法。 stdClass クラスは継承できますが、継承しても意味がありません。
http://www.bkjia.com/PHPjc/756340.html
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/756340.html技術記事 Baidu Encyclopedia では、stdClass の定義は次のとおりです。 次のようにコードをコピーします。 stdClass は PHP5 でのみ普及しました。 stdClass も zend の予約クラスです。 stdClass は PHP です...