Jawaban:
stdClass
adalah kelas kosong generik PHP, seperti Object
di Jawa atau object
Python ( Edit: tetapi tidak benar-benar digunakan sebagai kelas dasar universal; terima kasih @Ciaran untuk menunjukkannya ).
Ini berguna untuk objek anonim, properti dinamis, dll.
Cara mudah untuk mempertimbangkan StdClass adalah sebagai alternatif dari array asosiatif. Lihat contoh ini di bawah ini yang menunjukkan bagaimana json_decode()
memungkinkan untuk mendapatkan instance StdClass atau array asosiatif. Juga tetapi tidak ditampilkan dalam contoh ini, SoapClient::__soapCall
mengembalikan instance 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
Lihat Properti Dinamis dalam PHP dan StdClass untuk contoh lebih lanjut.
{}
konstruk JavaScript .
function(StdClass $a, array $params)
vs memeriksa apakah $a
objek dan instanceof
.
stdClass
hanya kelas generik 'kosong' yang digunakan saat casting tipe lain ke objek. Meskipun apa yang dua jawaban lain mengatakan, stdClass
adalah tidak kelas dasar untuk objek di PHP. Ini dapat ditunjukkan dengan cukup mudah:
class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'
Saya tidak percaya ada konsep objek dasar dalam PHP
stdClass adalah fitur PHP hebat lainnya. Anda dapat membuat kelas PHP anonim. Mari kita periksa contoh.
$page=new stdClass();
$page->name='Home';
$page->status=1;
sekarang anggap Anda memiliki kelas lain yang akan diinisialisasi dengan objek halaman dan jalankan basis di atasnya.
<?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';
}
}
Sekarang Anda harus membuat objek PageShow baru dengan Halaman Obyek.
Di sini tidak perlu menulis Template Kelas baru untuk ini, Anda cukup menggunakan stdClass untuk membuat Kelas dengan cepat.
$pageview=new PageShow($page);
$pageview->show();
stdClass
.
Juga patut dicatat, sebuah stdClass
objek dapat dibuat dari penggunaannya json_decode()
juga.
True
. Boolean adalah huruf kecil true
atau false
.
Menggunakan stdClass Anda dapat membuat objek baru dengan properti itu sendiri. Pertimbangkan contoh berikut yang mewakili detail pengguna sebagai array asosiatif.
$array_user = array();
$array_user["name"] = "smith john";
$array_user["username"] = "smith";
$array_user["id"] = "1002";
$array_user["email"] = "smith@nomail.com";
Jika Anda perlu merepresentasikan detail yang sama dengan properti suatu objek, Anda bisa menggunakan stdClass seperti di bawah ini.
$obj_user = new stdClass;
$obj_user->name = "smith john";
$obj_user->username = "smith";
$obj_user->id = "1002";
$obj_user->email = "smith@nomail.com";
Jika Anda seorang pengembang Joomla, rujuk contoh ini di dokumen Joomla untuk pemahaman lebih lanjut.
Juga,
$myNewObj->setNewVar = 'newVal';
menghasilkan objek stdClass - otomatis dicor
Saya menemukan ini hari ini dengan salah mengeja:
$GLOBASLS['myObj']->myPropertyObj->myProperty = 'myVal';
Keren!
Jawaban di sini mencakup ekspresi yang stdClass
merupakan kelas anonim atau bahkan objek anonim. Itu tidak benar.
stdClass
hanyalah kelas standar yang telah ditentukan sebelumnya. Anda dapat memeriksa ini menggunakan instanceof
operator atau fungsi get_class
. Tidak ada yang istimewa di sini. PHP menggunakan kelas ini saat memberikan nilai lain ke objek.
Dalam banyak kasus di mana stdClass
digunakan oleh pemrogram array adalah pilihan yang lebih baik, karena fungsi yang berguna dan fakta bahwa usecase ini mewakili struktur data bukan objek nyata.
Juga perlu dicatat bahwa dengan menggunakan Casting Anda sebenarnya tidak perlu membuat objek seperti pada jawaban yang diberikan oleh @Bandula. Alih-alih, Anda cukup melemparkan array ke objek dan stdClass dikembalikan. Sebagai contoh:
$array = array(
'Property1'=>'hello',
'Property2'=>'world',
'Property3'=>'again',
);
$obj = (object) $array;
echo $obj->Property3;
Output: again
Sebenarnya saya mencoba membuat stdClass kosong dan membandingkan kecepatan ke kelas kosong.
class emp{}
kemudian mulai membuat 1000 stdClasses dan emps ... kelas kosong dilakukan di sekitar 1.100 mikrodetik sementara stdClasses mengambil lebih dari 1.700 mikrodetik. Jadi saya kira lebih baik untuk membuat kelas boneka Anda sendiri untuk menyimpan data jika Anda ingin menggunakan objek untuk itu sangat buruk (array jauh lebih cepat baik untuk menulis maupun membaca).
StdClass memungkinkan Anda untuk membuat kelas anonim dan dengan casting objek Anda juga dapat mengakses kunci array asosiatif dalam gaya OOP. Sama seperti Anda akan mengakses properti objek biasa.
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"]);
akan bergema
John Doe
Jika Anda ingin dengan cepat membuat objek baru untuk menyimpan beberapa data tentang buku. Anda akan melakukan sesuatu seperti ini:
$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/";
Silakan periksa situs - http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ untuk rincian lebih lanjut.
Harap diingat bahwa 2 stdClasses kosong tidak sepenuhnya sama. Ini sangat penting ketika menulis harapan ejekan.
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 >
Manual php.net memiliki beberapa penjelasan yang solid dan contoh yang dikontribusikan oleh pengguna tentang apa stdClass, saya terutama menyukai yang ini http://php.net/manual/en/language.oop5.basic.php#92123 , https: // stackoverflow.com/a/1434375/2352773 .
stdClass adalah objek PHP default. stdClass tidak memiliki properti, metode, atau induk. Itu tidak mendukung metode ajaib, dan tidak mengimplementasikan antarmuka.
Ketika Anda melemparkan skalar atau array sebagai Objek, Anda mendapatkan instance dari stdClass. Anda dapat menggunakan stdClass kapan pun Anda membutuhkan instance objek generik.
stdClass BUKAN kelas dasar! Kelas PHP tidak secara otomatis mewarisi dari kelas mana pun. Semua kelas berdiri sendiri, kecuali mereka secara eksplisit memperluas kelas lain. PHP berbeda dari banyak bahasa berorientasi objek dalam hal ini.
Anda bisa mendefinisikan kelas yang memperluas stdClass, tetapi Anda tidak akan mendapat manfaat, karena stdClass tidak melakukan apa-apa.
stdclass adalah cara di mana php hindari berhenti menafsirkan skrip ketika ada beberapa data yang harus dimasukkan ke dalam kelas, tetapi sayangnya kelas ini tidak didefinisikan
Contoh:
return $statement->fetchAll(PDO::FETCH_CLASS , 'Tasks');
Di sini data akan dimasukkan ke dalam 'Tugas' yang telah ditentukan. Tetapi, jika kita melakukan kode seperti ini:
return $statement->fetchAll(PDO::FETCH_CLASS );
lalu php akan memasukkan hasilnya stdclass .
secara sederhana phpmengatakan bahwa: lihat, kami memiliki KIDS yang baik [Objek] Di sini tetapi tanpa Orang Tua. Jadi, kami akan mengirim mereka ke Rumah Perawatan anak bayistdclass :)
Anda juga dapat menggunakan object
untuk melemparkan array ke objek pilihan Anda:
Class Example
{
public $name;
public $age;
}
Sekarang untuk membuat objek tipe Example
dan menginisialisasi Anda dapat melakukan salah satu dari ini:
$example = new Example();
$example->name = "some name";
$example->age = 22;
ATAU
$example = new Example();
$example = (object) ['name' => "some name", 'age' => 22];
Metode kedua sebagian besar berguna untuk menginisialisasi objek dengan banyak properti.
stClass adalah kelas kosong yang dibuat oleh php itu sendiri, dan harus digunakan oleh php saja, karena bukan hanya kelas "kosong", php menggunakan stdClass untuk mengonversi array ke gaya objek jika Anda perlu menggunakan stdClass, saya merekomendasikan dua opsi yang lebih baik : 1- gunakan array (jauh lebih cepat dari kelas) 2- membuat kelas kosong Anda sendiri dan menggunakannya
//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';
apa yang membuat seseorang berpikir tentang menggunakan gaya objek, bukan gaya array ???
Alasan mengapa kita memiliki stdClass adalah karena dalam PHP tidak ada cara untuk membedakan array normal dari associate array (seperti dalam Javascript yang Anda miliki {}
untuk objek dan []
untuk array untuk membedakannya).
Jadi ini menciptakan masalah untuk objek kosong. Ambil contoh ini.
PHP:
$a = [1, 2, 3]; // this is an array
$b = ['one' => 1, 'two' => 2]; // this is an associate array (aka hash)
$c = ['a' => $a, 'b' => $b]; // this is also an associate array (aka hash)
Mari kita asumsikan Anda ingin menyandikan JSON variabel $ c
echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': {one: 1, two: 2}}
Sekarang katakanlah Anda menghapus semua kunci dari $b
membuatnya kosong. Karena $b
sekarang kosong (Anda menghapus semua kunci ingat?), Sepertinya []
yang dapat berupa array atau objek jika Anda melihatnya.
Jadi jika Anda melakukan json_encode lagi, hasilnya akan berbeda
echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': []}
Ini adalah masalah karena kita tahu b
bahwa seharusnya menjadi associate array tetapi PHP (atau fungsi apa pun seperti json_encode) tidak.
Jadi stdClass datang untuk menyelamatkan. Ambil contoh yang sama lagi
$a = [1, 2, 3]; // this is an array
$b = (object) ['one' => 1, 'two' => 2]; // this makes it an stdClass
$c = ['a' => $a, 'b' => $b]; // this is also an associate array (aka hash)
Jadi sekarang bahkan jika Anda menghapus semua kunci dari $b
dan membuatnya kosong, karena ini adalah stdClass itu tidak masalah dan ketika Anda json_encode Anda akan mendapatkan ini:
echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': {}}
Ini juga alasan mengapa json_encode
dan json_decode
secara default mengembalikan stdClass.
$c = json_decode('{"a": [1,2,3], "b": {}}', true); //true to deocde as array
// $c is now ['a' => [1,2,3], 'b' => []] in PHP
// if you json_encode($c) again your data is now corrupted