質問
何を定義してください stdClass
は。
解決
stdClass
PHPの一般的な空のクラスのようなものです Object
Java または object
Python では (編集: ただし、実際にはユニバーサル基本クラスとしては使用されません。ありがとう @Ciaran のため これを指摘する).
これは、匿名オブジェクト、動的プロパティなどに役立ちます。
StdClass を連想配列の代替として検討する簡単な方法です。その方法を示す以下の例を参照してください。 json_decode()
StdClass インスタンスまたは連想配列を取得できます。この例には示されていませんが、 SoapClient::__soapCall
StdClass インスタンスを返します。
<?php
//Example with StdClass
$json = '{ "foo": "bar", "number": 42 }';
$stdInstance = json_decode($json);
echo $stdInstance->foo . PHP_EOL; //"bar"
echo $stdInstance->number . PHP_EOL; //42
//Example with associative array
$array = json_decode($json, true);
echo $array['foo'] . PHP_EOL; //"bar"
echo $array['number'] . PHP_EOL; //42
見る PHP および StdClass の動的プロパティ 他の例については。
他のヒント
stdClass
は、オブジェクトへの他のタイプをキャストする場合に使用されるだけで、一般的な「空」クラスです。他の2つの答えが言うことにもかかわらず、stdClass
は、PHP内のオブジェクトのための のない基底クラスです。これはかなり簡単に実証することができます:
class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'
私はPHPでのベースオブジェクトの概念があります信じていません。
はstdClassは別の偉大なPHPの機能です。 あなたは匿名のPHPクラスを作成することができます。 例を確認できます。
$page=new stdClass();
$page->name='Home';
$page->status=1;
今あなたはページオブジェクトで初期化し、それをベースに実行される別のクラスを持っていると思う。
<?php
class PageShow {
public $currentpage;
public function __construct($pageobj)
{
$this->currentpage = $pageobj;
}
public function show()
{
echo $this->currentpage->name;
$state = ($this->currentpage->status == 1) ? 'Active' : 'Inactive';
echo 'This is ' . $state . ' page';
}
}
これは、ページオブジェクトを持つ新しいpageshowのオブジェクトを作成する必要があります。
ここでは、単にその場でクラスを作成するためにはstdClassを使用することができ、このために新しいクラステンプレートを記述する必要はありません。
$pageview=new PageShow($page);
$pageview->show();
また注目に値する、stdClass
オブジェクトは同様にjson_decode()
の使用から作成することができます。
使用する 標準クラス 独自のプロパティを使用して新しいオブジェクトを作成できます。ユーザーの詳細を連想配列として表す次の例を考えてみましょう。
$array_user = array();
$array_user["name"] = "smith john";
$array_user["username"] = "smith";
$array_user["id"] = "1002";
$array_user["email"] = "smith@nomail.com";
オブジェクトのプロパティと同じ詳細を表す必要がある場合は、次のように使用できます。 標準クラス 以下のように。
$obj_user = new stdClass;
$obj_user->name = "smith john";
$obj_user->username = "smith";
$obj_user->id = "1002";
$obj_user->email = "smith@nomail.com";
Joomla 開発者の方はこちらを参照してください この例は Joomla ドキュメントにあります さらなる理解のために。
同様に、
$myNewObj->setNewVar = 'newVal';
はstdClassオブジェクトを生成する - オートキャスト
私はスペルミスで、今日これを見つけます:
$GLOBASLS['myObj']->myPropertyObj->myProperty = 'myVal';
クール!
はstdClassは、匿名クラスまたは匿名オブジェクトではありません。
回答は、ここにstdClass
が匿名クラス、あるいは匿名オブジェクトであることを表現しています。それは本当ではないです。
stdClass
は通常の事前に定義されたクラスです。あなたは、この使用してinstanceof
オペレータまたは機能get_class
を確認することができます。特別なことは何もここにありません。オブジェクトのために他の値をキャストする場合、PHPは、このクラスを使用します。
stdClass
がアレイが良いための有用な機能のオプション、このユースケースは、データ構造ではない実際のオブジェクトを表すことであるプログラマが使用されます。
実は、空はstdClassを作成し、空のクラスの速度を比較してみました。
class emp{}
は、その後1000年stdClassesとEMPSを作成進んstdClassesは1700マイクロ秒を引き継いながら...空のクラスは、周りの1100マイクロ秒で行いました。だから私は、あなたが(配列は、書き込みと読み出しの両方のためにはるかに高速です)ひどく、そのためにオブジェクトを使用する場合は、データを格納するために、独自のダミーのクラスを作成するために、その優れたを推測します。
使用中の stdClass オブジェクト
STDCLASSを使用すると、匿名のクラスを作成でき、オブジェクトキャストを使用すると、OOPスタイルで連想配列のキーにアクセスすることもできます。通常のオブジェクトのプロパティにアクセスするのと同じように。
例
class Example {
private $options;
public function __construct(Array $setup)
{
// casting Array to stdClass object
$this->options = (object) $setup;
// access stdClass object in oop style - here transform data in OOP style using some custom method or something...
echo $this->options->{'name'}; // ->{'key'}
echo $this->options->surname; // ->key
}
}
$ob1 = new Example(["name" => "John", "surname" => "Doe"]);
反響します
ジョン・ドウ
そのキャスティング使って、あなたが実際に@Bandulaによって与えられた答えのようにオブジェクトを作成する必要がないことも注目に値します。代わりに、単にオブジェクトにあなたの配列をキャストすることができますし、はstdClassが返されます。たとえばます:
$array = array(
'Property1'=>'hello',
'Property2'=>'world',
'Property3'=>'again',
);
$obj = (object) $array;
echo $obj->Property3;
Output: again
あなたはすぐに書籍に関するいくつかのデータを保持する新しいオブジェクトを作成したい場合。あなたはこのような何かをするでしょう。
$book = new stdClass;
$book->title = "Harry Potter and the Prisoner of Azkaban";
$book->author = "J. K. Rowling";
$book->publisher = "Arthur A. Levine Books";
$book->amazon_link = "http://www.amazon.com/dp/0439136369/";
のサイトを確認してください - <のhref = "http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/" のrel = "nofollowをnoreferrer "> http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ の詳細についてます。
2空stdClassesは厳密に等しくないことを心に留めておいてください。嘲笑の期待を書くときにこれは非常に重要です。
php > $a = new stdClass();
php > $b = new stdClass();
php > var_dump($a === $b);
bool(false)
php > var_dump($a == $b);
bool(true)
php > var_dump($a);
object(stdClass)#1 (0) {
}
php > var_dump($b);
object(stdClass)#2 (0) {
}
php >
php.net マニュアルには、stdClass とは何かについて、ユーザーによって提供されたいくつかのしっかりした説明と例が含まれています。私はこれが特に好きです http://php.net/manual/en/ language.oop5.basic.php#92123, https://stackoverflow.com/a/1434375/2352773.
stdClass はデフォルトの PHP オブジェクトです。stdclassには、プロパティ、方法、または親がありません。魔法の方法をサポートせず、インターフェイスを実装しません。
スカラーまたは配列をオブジェクトとしてキャストすると、stdclassのインスタンスが表示されます。一般的なオブジェクトインスタンスが必要なときはいつでもstdclassを使用できます。
stdClass は基本クラスではありません。PHPクラスは、どのクラスからも自動的に継承しません。すべてのクラスは、別のクラスを明示的に拡張しない限り、スタンドアロンです。この点で、PHPは多くのオブジェクト指向言語とは異なります。
Stdclassを拡張するクラスを定義することはできますが、Stdclassは何もしないため、利益は得られません。
PHP'php'"タグ付けされた質問はstdClass にタグ付けされます。
単にの'php'" rel="tag"> PHPタグ付けtitle="show:私たちは、見ての良いKIDS [オブジェクト]ここではなく、親のないを持っています。そこで、我々は、ケアホームはstdClass 幼児子供にそれらを送信しますA> :)
また、あなたの好みのオブジェクトに配列をキャストするobject
を使用することができます:
Class Example
{
public $name;
public $age;
}
さて型Example
のオブジェクトを作成するには、あなたがこれらのいずれかを行うことができ、それを初期化する:
$example = new Example();
$example->name = "some name";
$example->age = 22;
または
$example = new Example();
$example = (object) ['name' => "some name", 'age' => 22];
第2の方法は、多くの特性を持つオブジェクトを初期化するためのほとんど有用である。
stClassは、PHP自体により作成された空のクラスであり、そして唯一のPHPで使用されるべきです、 それだけで「空」クラスではありませんので、 PHPは、スタイルをオブジェクトへの配列を変換するためにはstdClassを使用しています あなたがstdClassのを使用する必要がある場合、私は2つのより良いオプションをお勧めします。 (クラスよりもはるかに高速)の1-使用アレイ 2 - 独自の空のクラスを作成し、それを使用する
//example 1
$data=array('k1'=>'v1' , 'k2'=>'v2',....);
//example 2
//creating an empty class is faster than instances an stdClass
class data={}
$data=new data();
$data->k1='v1';
$data->k2='v2';
誰かが代わりに、配列風のオブジェクトスタイルを使用して考えるようにするもの???