ホームページ  >  記事  >  php教程  >  PHP ソース コードから stdClass クラスについて詳しく学ぶ

PHP ソース コードから stdClass クラスについて詳しく学ぶ

高洛峰
高洛峰オリジナル
2016-12-21 14:19:471146ブラウズ

Baidu Encyclopedia では、stdClass の定義は次のとおりです:

stdClass在PHP5才开始被流行。而stdClass也是zend的一个保留类。stdClass是PHP的一个基类,
所有的类几乎都继承这个类,所以任何时候都可以被new,可以让这个变量成为一个object。同时,
这个基类又有一个特殊的地方,就是没有方法。凡是用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;
}
/* }}} */

要約すると、

stdClass クラスは PHP の内部予約クラスであり、最初はすべてのマジック メソッドが NULL に設定されています。しかし、呼び出すメソッドがありません。 stdClass クラスは継承できますが、継承しても意味がありません。

PHP ソース コードから stdClass クラス関連の記事をさらに深く理解するには、PHP 中国語 Web サイトに注目してください。


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