PHP5_PHP チュートリアルの新しい stdClass 内部予約クラス

WBOY
リリース: 2016-07-21 15:28:58
オリジナル
920 人が閲覧しました

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

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

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

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

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

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


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



PHP の 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」が出力されます。これは単なる 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 ); Enzend_standard_Class_def = Zend_register_internal_Class (& Class_entry EFAULT_CLASSSES (TSRMLS_C);
Return Success;
/*}} } */


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

要約すると、
stdClass は PHP の内部予約クラスであり、最初はすべてのマジック メソッドを NULL に設定できますが、それを実行できるメソッドはありません。呼ばれる。 stdClass クラスは継承できますが、継承しても意味がありません。

公式マニュアルリファレンス: http://www.php.net/manual/en/ language.oop5.basic.php#92123


http://www.bkjia.com/PHPjc/323531.html

www.bkjia.com

tru​​e
http://www.bkjia.com/PHPjc/323531.html

技術記事 stdClass クラスは PHP の内部予約クラスであり、最初はすべてのマジック メソッドが NULL に設定されていますが、...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!