PHPのはstdClass

アウトライン

以下は、PHPはstdClassのBaiduの百科事典の説明であります:

stdClassは、PHP5で人気があるようになりました。stdClassのZendのは、予約クラスです。stdClassのPHPクラスはマジックメソッドのすべてがNULLに設定され、内部クラスの予約、最初はメンバ変数やメンバメソッドです。新しいはstdClass()変数を使用する方は、$ A->テストを発生する可能性はありません( )このアプローチを使用しています。任意の場所で呼び出されるオブジェクトの一意のPHP5のオブジェクトは、参照アドレスタイプなので、資源の相対的な消費が少なくなります。他のページが割り当てられたときに代わりに、直接コピーを参照すると、変更されました。

Baiduの検索では、人々が記事を書くのがたくさんある、私ははstdClassは、すべてのクラスの基本クラスです言及したが、私はそれを試してみました:

class Test{}
$t = new Test();
var_dump($t instanceof stdClass);

出力:bool(false)

もちろん、基本クラスTestはstdClassではない、それはすべてstdClassの基本クラスではありません。

だから、最終的にはstdClassはそれが何ですか?最後に、あなたはそれをやっているの?

疑問

このクラスは終わり何地獄にはメンバ変数と無監査魔法の方法、そしてはstdClassを持っていないので?

$a = new stdClass();
$a->username = 'a';
$a->email = 'qq';
var_dump($a);

出力結果:

クラスはstdClass#1(2){
公共$ユーザ名=>
の文字列は、(1) ""
公共$ Eメール=>
の文字列(2) "QQ"
}

明らかに、これは完全なデータああです。

だからと配列があるとの違いは何ですか?私は、夜に何人かの人々が説明されている以下のコードを見て

$a = new stdClass();
$b = $a;

AB二つの変数公衆ようなメモリは、$b=$a;割り当てに参照され、それが配列されている場合は、オブジェクトの配列全体をコピーします。

しかし、あなたは何のシンボルのアドレスを取るのを忘れ?$b=&$aまた、リファレンスああによって割り当てられていますか?何が違いますの?もちろん、上記の引数は、ロールはstdClassの、どのような種類がそれである私を説得しないのですか?におけるその存在の意味はどこにありますか?

など、参照渡し?シンボルは、アドレスを使用する必要はありませんか?これは、グローバル変数のパラメータおよび方法、それに完全に利用できないのですか?

もちろん、アレイ方式で渡されたパラメータは、使用されるパラメータは、&$a影響を参照することによって渡すことができるが、機能がコピーされたアドレスのシンボル伝送時間を使用していない場合、メモリが無駄になります。しかし、それはまた、メモリの無駄を当然の配列をコピーするために、対応するリスクの道を負担しなければならないが、関係なく、アレイ法の範囲内で動作する方法の、配列を外部に反応しなくなります。場合はstdClass、クラスが同じではありません、あなたは合格行く、我々は認識を越えてプロパティを準備するために、時間外の良い仕事をする必要があります。

グローバル変数、静的メソッドSでグローバル変数を定義する場合、この変数は非常に本格的に配列を使用、その後、すべてが利用可能です。あなたは、オブジェクトのメソッドで取得し、バックで使用するために、オブジェクトの属性を設定します。あなたは、配列を使用している場合は、もう一度このオブジェクトの取得方法bの後、恥ずかしい、S配列のメソッド呼び出しにのみ変更されたローカル変数のその配列を修正するために、返され、所望の効果を達成できませんでした。SはstdClassのオブジェクトを返す場合、問題はない、ああ。

栗の場合:

class Test{
    private static $user = [];
    public static function getUser(){
        return self::$user;
    }
}
$a = Test::getUser();
$a['username'] = 'name';
$b = Test::getUser();
var_dump($b);

出力結果:

アレイ(0){
}

この場合はstdClassを使用し、効果が全く異なります。

class Test{
    private static $user = null;
    public static function getUser(){
        if(self::$user === null){
            self::$user = new stdClass();
        }
        return self::$user;
    }
}
$a = Test::getUser();
$a->username = 'name';
$b = Test::getUser();
var_dump(get_object_vars($b));

出力:

アレイ(1){
'ユーザ名' =>
列(4) "名前"
}

パーフェクト〜

stdClassこのプロパティがグローバルに提供することではなく、右、その後、実際には、また、同じ方法を達成するためにシングルトンクラスを使用しますが、明らかに使用することができるためstdClass、より柔軟でより簡潔な。

あなたが使用することができるget_object_vars($a)配列に変換されたオブジェクトのプロパティを話すトークはstdClass配列にメソッドオブジェクトを。


この時点で、私はまた考えるstdClassシナリオ。

私はそれがより多くのアプリケーションシナリオを持っていると信じて、すべての後、割り当てへの直接参照され、オブジェクトが直接変更されます。しかし、私は無知は良いシナリオ、ああは、存在しないと思います。

皆さん、さようなら!

おすすめ

転載: www.cnblogs.com/hujingnb/p/11735542.html