とは何かを定義してくださいstdClass
。
18 に答える
stdClass
他のタイプをオブジェクトにキャストするときに使用される単なる「空の」クラスです。他の2つの答えが何を言っているにもかかわらず、PHPのオブジェクトの基本クラスでstdClass
はありません。これはかなり簡単に実証できます。
class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'
PHPにベースオブジェクトの概念があるとは思わない
stdClass
Object
Javaやobject
PythonのようなPHPの汎用空のクラスです(編集:ただし、実際にはユニバーサル基本クラスとして使用されていません。これを指摘してくれた@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
stdClass は、もう 1 つの優れた 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';
}
}
ここで、Page オブジェクトを使用して新しい PageShow オブジェクトを作成する必要があります。
ここでは、新しいクラス テンプレートを作成する必要はありません。stdClass を使用してその場でクラスを作成するだけです。
$pageview=new PageShow($page);
$pageview->show();
また、stdClass
オブジェクトは を使用して作成することもできますjson_decode()
。
stdClassを使用すると、独自のプロパティを持つ新しいオブジェクトを作成できます。ユーザーの詳細を連想配列として表す次の例を考えてみましょう。
$array_user = array();
$array_user["name"] = "smith john";
$array_user["username"] = "smith";
$array_user["id"] = "1002";
$array_user["email"] = "smith@nomail.com";
オブジェクトのプロパティと同じ詳細を表す必要がある場合は、以下のようにstdClassを使用できます。
$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
operator または functionを使用してこれを確認できますget_class
。ここには特別なことは何もありません。PHP は、他の値をオブジェクトにキャストするときにこのクラスを使用します。
プログラマが使用する多くの場合、stdClass
便利な機能と、このユースケースが実際のオブジェクトではなくデータ構造を表すという事実のために、配列の方が適しています。
実際に空の stdClass を作成して、空のクラスと速度を比較してみました。
class emp{}
次に、1000 個の stdClasses と emps の作成に進みました...空のクラスは約 1100 マイクロ秒で完了しましたが、stdClasses は 1700 マイクロ秒以上かかりました。したがって、データを保存するためにオブジェクトをひどく使用したい場合は、データを保存するための独自のダミークラスを作成する方がよいと思います (配列は書き込みと読み取りの両方ではるかに高速です)。
php.netのマニュアルには、stdClass とは何かについてユーザーが寄稿したいくつかのしっかりした説明と例があります。 stackoverflow.com/a/1434375/2352773。
stdClass はデフォルトの PHP オブジェクトです。stdClass には、プロパティ、メソッド、または親がありません。魔法のメソッドをサポートしておらず、インターフェイスを実装していません。
スカラーまたは配列を Object としてキャストすると、stdClass のインスタンスが取得されます。汎用オブジェクト インスタンスが必要な場合はいつでも stdClass を使用できます。
stdClass は基底クラスではありません! PHP クラスは、どのクラスからも自動的に継承されません。別のクラスを明示的に拡張しない限り、すべてのクラスはスタンドアロンです。この点で、PHP は多くのオブジェクト指向言語とは異なります。
stdClass を拡張するクラスを定義することもできますが、stdClass は何もしないため、メリットはありません。
本に関するデータを保持する新しいオブジェクトをすばやく作成したい場合。次のようにします。
$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/";
詳細については、 http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/のサイトを確認してください。
stClass は php 自体によって作成された空のクラスであり、php でのみ使用する必要があります。これは単なる「空の」クラスではないためです。 stdClass を使用する必要がある場合、php は 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';
配列スタイルの代わりにオブジェクト スタイルを使用することを考える理由は何ですか?
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 番目の方法は、多くのプロパティを持つオブジェクトを初期化する場合に最も役立ちます。