要約すると、
stdClass クラスは、PHP の内部予約クラスです。最初は、変数パラメーターを渡すために使用できるメンバー変数やメンバー メソッドはありません。呼び出し可能なメソッドはありません。 stdClass クラスは継承できますが、継承する意味はほとんどありません。
これは zend_builtin_module のモジュール初期化関数です。この関数は、PHP カーネルがモジュール初期化操作を実行するときに自動的にロードされ、stdClass クラスの登録操作も実行されます。このコードからわかるように、stdClass クラスはメンバー変数もメンバー メソッドも持たないクラスです。すべてのマジック メソッド、親クラス、インターフェイスなどは、初期化中に NULL に設定されます。 PHP ではメソッドをクラスに動的に追加できないため、このクラスは動的属性を処理するためにのみ使用できますが、これも一般的な使用法です。
コードを実行すると、「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", N ULL);
zend_standard_class_def = zend_register_internal_class(&class_entry TSRMLS_CC);
/* 例外クラス、SPL の一部のクラスなどのデフォルトのクラス、インターフェースを登録します。 */
zend_register_default_classes(TSRMLS_C); return SUCCESS;
}
/* }}} */
または、このように理解することもできます。PHP5 オブジェクトの一意性により、オブジェクトはどこから呼び出されても参照アドレス型であるため、比較的少ないリソースが消費されます。他のページで値を割り当てると、コピーを参照するのではなく、値が直接変更されます。
例:
$user = new stdClass();
$user->name = 'gouki';
$myUser = $user;
$myUser->name = ' flyp ig ';
PHP4 時代であれば、そのようなコードはシステム リソースを消費します。理由:
$myUser = $user;
これはコピーを作成しています。したがって、PHP4 では、次のように使用されます:
$myUser = & $user;