プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、stdClassとは何ぞや?
結論から書くと、stdClassは

PHPさんが勝手に定義してくれている中身が空っぽのクラス

です。
特徴としては

1.プロパティとかメソッドとか何も無し
2.特に定義しなくてもプロパティに値を入れられる
3.未定義のプロパティ(値を代入していないプロパティ)にアクセスするとWarning


といったところでしょうか。

例えば

<?php

$clsStd = new stdClass();
$clsStd->hoge1 = "value_hoge1";

//値代入済み
print $clsStd->hoge1 . "\n";

//未定義
print $clsStd->hoge2 . "\n";

のようなコードを実行すると、結果は

value_hoge1
PHP Notice: Undefined property: stdClass::$hoge2 in C:\test\test.php on line 10

のようになります。

「$clsStd->hoge1」は特に定義していませんが、値を代入して普通に参照できます。
「$clsStd->hoge2」は値を代入していないので、未定義扱いになりました。

それでは詳細……というほどでもありませんが、詳細を書いていきます。

そもそものきっかけは、こんなコードを書いたことでしたφ(--)

<?php

class clsHoge {
    public $hoge1;

    function func1(){
        //なんか処理
    }
}

$hoge = new clsHoge();

$hgoe->hoge1 = "aaa";
$hgoe->func1();

print $hgoe->hoge1 . "\n";

これを実行したところ、こんな結果になったのですφ(--)

PHP Warning: Creating default object from empty value in C:\test\test.php on line 13

PHP Fatal error: Call to undefined method stdClass::func1() in C:\test\test.php on line 14

あっ!
$hoge」と「$hgoe」になってるじゃん<( ̄◇ ̄;)>

慌てて直して無事に動いたのですが「stdClass::func1()」が気になったのです。
「stdClass」って何じゃらほい(--?

ほんで、あれやこれやと調べたところ

1.PHPさんが勝手に作ってくれるクラス
2.中身は空っぽ
3.未定義の変数をオブジェクトとして扱おうとすると自動的に割り当ててくれる


ということが分かりました。

なるほど(--)

今回の例で言えば

$hgoe->hoge1 = "aaa";

の時点で「$hgoe」なんて定義してないから

PHP Warning: Creating default object from empty value in C:\test\test.php on line 13

の警告を出してくれたあと、PHPさんの方で気を利かせて、見えないところで

$hgoe = new stdClass();

をやってくれた感じなのですね。
その後

$hgoe->func1();

が実行されたけど、stdClassクラスにfunc1()なんてメソッドは無いから

PHP Fatal error: Call to undefined method stdClass::func1() in C:\test\test.php on line 14

なエラーが出たのでしょう。

身に覚えのない「stdClass」が出てきたら、
該当のオブジェクトが本当にあるかを疑えってことですね。
今回のように名前の付け方をミスってたりなんだりで、
変数の中身がない(からPHPさんがstdClassを割り当ててくれている)
可能性が高そうです。

そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PHP  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事