ホームページ >php教程 >php手册 >PHP5 の新しい stdClass 内部予約クラス

PHP5 の新しい stdClass 内部予約クラス

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-21 08:54:00864ブラウズ

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

このクラスは PHP の予約クラスであり、すべてのクラスの基本クラスではありません。

コードをコピー コードは次のとおりです:


class foo {}
$bar = new foo();
echo $bar instanceof stdClass?'yes':'no'
//出力: no


別の例:

コードをコピーします コードは次のとおりです:


// CTest は stdClass から派生しません
class CTest {
public $property1;
}
$t = new CTest($) tinstanceof stdClass); // false
var_dump(is_subclass_of($t, 'stdClass')); // false
echo get_class($t) . // 'CTest'
; get_parent_class($t) . "n"; // false (親なし)


(object) を使用したキャストは stdClass のインスタンスになります。




PHP の stdClass クラスを理解する
stdClass は PHP5 でのみ普及しました。 stdClass も zend の予約クラスです。 stdClass は PHP の基本クラスです。
ほとんどすべてのクラスがこのクラスを継承するため、いつでも新しいクラスになり、この変数はオブジェクトになる可能性があります。同時に、
この基本クラスにはメソッドが存在しないというもう 1 つの特別な機能があります。 new stdClass()、
を使用する変数は、この方法 $a->test() では使用できません。 PHP5 オブジェクトのユニークな点は、オブジェクトがどこからでも呼び出されるとき、
は参照アドレス型であるため、消費するリソースが比較的少ないことです。他のページで値を割り当てると、コピーを参照するのではなく、値が直接変更されます。

上記の定義のほとんどは正しいですが、致命的な診断エラーがあります。stdClass は PHP の基本クラスであり、ほとんどすべてのクラスがこのクラスを継承します。 簡単な例を見てみましょう:


コードをコピーします コードは次のとおりです:

class EmptyClass {


}
$object = new EmptyClass();
if ($objectinstanceof stdClass) {
echo
}else{
エコー「いいえ」
}


コードを実行すると、「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_register_internal_class(&class_entry TSRMLS_CC);

/* 例外クラス、SPL の一部のクラスなどのデフォルトのクラス、インターフェースを登録します。*/
zend_register_default_classes(TSRMLS_C); >}
/* }}} */


これは zend_builtin_module のモジュール初期化関数です。この関数は、PHP カーネルがモジュールの初期化操作を実行するときに自動的にロードされ、stdClass クラスの登録操作も実行されます。このコードからわかるように、stdClass クラスはメンバー変数もメンバー メソッドも持たないクラスです。 すべてのマジック メソッド、親クラス、インターフェイスなどは、初期化中に NULL に設定されます。 PHP ではメソッドをクラスに動的に追加できないため、このクラスは動的属性を処理するためにのみ使用できますが、これも一般的な使用法です。

要約すると、
stdClass クラスは PHP の内部予約クラスであり、最初はすべてのマジック メソッドが NULL に設定されており、これを使用して変数を渡すことができます。パラメータはありますが、呼び出すメソッドがありません。 stdClass クラスは継承できますが、継承する意味はほとんどありません。


公式マニュアル参照: http://www.php.net/manual/en/ language.oop5.basic.php#92123




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