2015.
05.
18
09:55:28
結論から書くと、stdClassは
PHPさんが勝手に定義してくれている中身が空っぽのクラス
です。
特徴としては
1.プロパティとかメソッドとか何も無し
2.特に定義しなくてもプロパティに値を入れられる
3.未定義のプロパティ(値を代入していないプロパティ)にアクセスするとWarning
といったところでしょうか。
例えば
のようなコードを実行すると、結果は
のようになります。
「$clsStd->hoge1」は特に定義していませんが、値を代入して普通に参照できます。
「$clsStd->hoge2」は値を代入していないので、未定義扱いになりました。
それでは詳細……というほどでもありませんが、詳細を書いていきます。
そもそものきっかけは、こんなコードを書いたことでしたφ(--)
これを実行したところ、こんな結果になったのですφ(--)
あっ!
「$hoge」と「$hgoe」になってるじゃん<( ̄◇ ̄;)>
慌てて直して無事に動いたのですが「stdClass::func1()」が気になったのです。
「stdClass」って何じゃらほい(--?
ほんで、あれやこれやと調べたところ
1.PHPさんが勝手に作ってくれるクラス
2.中身は空っぽ
3.未定義の変数をオブジェクトとして扱おうとすると自動的に割り当ててくれる
ということが分かりました。
なるほど(--)
今回の例で言えば
の時点で「$hgoe」なんて定義してないから
の警告を出してくれたあと、PHPさんの方で気を利かせて、見えないところで
をやってくれた感じなのですね。
その後
が実行されたけど、stdClassクラスにfunc1()なんてメソッドは無いから
なエラーが出たのでしょう。
身に覚えのない「stdClass」が出てきたら、
該当のオブジェクトが本当にあるかを疑えってことですね。
今回のように名前の付け方をミスってたりなんだりで、
変数の中身がない(からPHPさんがstdClassを割り当ててくれている)
可能性が高そうです。
そんな感じ\(--)/
PHPさんが勝手に定義してくれている中身が空っぽのクラス
です。
特徴としては
1.プロパティとかメソッドとか何も無し
2.特に定義しなくてもプロパティに値を入れられる
3.未定義のプロパティ(値を代入していないプロパティ)にアクセスするとWarning
といったところでしょうか。
例えば
<?php
$clsStd = new stdClass();
$clsStd->hoge1 = "value_hoge1";
//値代入済み
print $clsStd->hoge1 . "\n";
//未定義
print $clsStd->hoge2 . "\n";
$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
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";
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
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を割り当ててくれている)
可能性が高そうです。
そんな感じ\(--)/