dengan array baru saya melakukan ini:
$aVal = array();
$aVal[key1][var1] = "something";
$aVal[key1][var2] = "something else";
Apakah ada sintaksis yang mirip untuk suatu objek
(object)$oVal = "";
$oVal->key1->var1 = "something";
$oVal->key1->var2 = "something else";
$var = (object) (boolean) (string) (int) (array) new StdClass;
Anda tahu, hanya untuk aman.Arrays - How to define an empty object in PHP
. Tidak ada hubungannya dengan arrayJawaban:
Sebuah komentar di manual merangkum itu terbaik:
sumber
stdClass
di kepala saya sebagai "kelas standar"new \stdClass();
PHP Namespace DocstdClass()
dari kata ituAIDS
?Cara standar untuk membuat objek "kosong" adalah:
Tetapi, dengan PHP> = 5.4, saya pribadi lebih suka menggunakan:
Ini lebih pendek dan saya pribadi menganggapnya lebih jelas karena stdClass dapat menyesatkan programmer pemula (yaitu "Hei, saya ingin objek, bukan kelas!" ...).
Sama dengan PHP <5.4 adalah:
(object)[]
setara dengannew stdClass()
.Lihat manual PHP ( sini ):
dan ( sini ):
Namun ingat itu kosong ($ oVal) mengembalikan false , seperti yang dikatakan @PaulP:
Mengenai contoh Anda, jika Anda menulis:
PHP membuat Peringatan berikut ini, secara implisit membuat properti
key1
(objek itu sendiri)Ini bisa menjadi masalah jika konfigurasi Anda (lihat tingkat pelaporan kesalahan ) menunjukkan peringatan ini ke browser. Ini adalah seluruh topik lain, tetapi pendekatan cepat dan kotor bisa menggunakan operator kontrol kesalahan (@) untuk mengabaikan peringatan:
sumber
stdClass
dilakukan.stdClass
. Saya menggunakanstdClass
kode yang menjawab pertanyaan. Maaf, saya tidak membuat masalah baru, itu pendapat pribadi saya (seperti yang saya tulis).(object) []
Saya ingin menunjukkan bahwa dalam PHP tidak ada yang namanya objek kosong:
tapi tentu saja $ obj akan kosong.
Di sisi lain, array kosong berarti kosong dalam kedua kasus
Kutipan dari fungsi changelog kosong
sumber
php.net mengatakan yang terbaik:
sumber
Saya suka betapa mudahnya membuat objek jenis anonim dalam JavaScript:
Jadi saya selalu mencoba untuk menulis objek semacam ini di PHP seperti yang dilakukan javascript :
Tetapi karena ini pada dasarnya adalah array, Anda tidak dapat melakukan hal-hal seperti menetapkan fungsi anonim ke properti seperti js:
Ya, Anda bisa melakukannya, tetapi IMO tidak praktis / bersih:
Selain itu, menggunakan synthax ini Anda dapat menemukan beberapa kejutan lucu , tetapi berfungsi dengan baik untuk sebagian besar kasus.
sumber
Selain jawaban zombat jika Anda terus lupa
stdClass
Sekarang Anda bisa melakukannya:
sumber
Anda dapat menggunakan
new stdClass()
(yang disarankan):Atau Anda dapat mengonversi array kosong ke objek yang menghasilkan instance kosong baru dari kelas bawaan stdClass:
Atau Anda bisa mengonversi
null
nilai menjadi objek yang menghasilkan instance kosong baru dari kelas bawaan stdClass:sumber
untuk mengakses data dalam stdClass dengan cara yang mirip dengan yang Anda lakukan dengan array asosiatif cukup gunakan sintaks {$ var}.
sumber
Seperti yang telah ditunjukkan orang lain, Anda dapat menggunakan stdClass. Namun saya pikir ini lebih bersih tanpa (), seperti:
Namun berdasarkan pertanyaan, sepertinya yang Anda inginkan adalah dapat menambahkan properti ke objek dengan cepat. Anda tidak perlu menggunakan stdClass untuk itu, meskipun Anda bisa. Sungguh Anda bisa menggunakan kelas apa saja. Cukup buat instance objek dari kelas apa pun dan mulailah mengatur properti. Saya suka membuat kelas sendiri yang namanya hanya o dengan beberapa fungsi dasar dasar yang saya suka gunakan dalam kasus ini dan bagus untuk memperluas dari kelas lain. Pada dasarnya ini adalah kelas objek dasar saya sendiri. Saya juga suka memiliki fungsi bernama o (). Seperti itu:
Jika Anda tidak suka memiliki tipe objek basis Anda sendiri, Anda dapat meminta o () mengembalikan stdClass baru. Satu keuntungan adalah bahwa o lebih mudah diingat daripada stdClass dan lebih pendek, terlepas dari apakah Anda menggunakannya sebagai nama kelas, nama fungsi, atau keduanya. Bahkan jika Anda tidak memiliki kode apa pun di dalam kelas Anda, masih lebih mudah untuk menghafal daripada stdClass dengan huruf kapital dan canggung (yang mungkin memunculkan ide 'kelas penyakit menular seksual'). Jika Anda menyesuaikan kelas o, Anda mungkin menemukan penggunaan fungsi o () alih-alih sintaks konstruktor. Ini adalah fungsi normal yang mengembalikan nilai, yang kurang terbatas daripada konstruktor. Misalnya, nama fungsi dapat diteruskan sebagai string ke fungsi yang menerima parameter yang bisa dipanggil. Suatu fungsi juga mendukung perangkaian. Jadi Anda dapat melakukan sesuatu seperti:
Ini adalah awal yang bagus untuk "bahasa" dasar untuk membangun lapisan bahasa lain dengan lapisan atas ditulis dalam DSL internal penuh. Ini mirip dengan gaya pengembangan lisp, dan PHP mendukungnya jauh lebih baik daripada yang disadari kebanyakan orang. Saya menyadari ini sedikit menyinggung pertanyaan, tetapi pertanyaan menyentuh pada apa yang saya pikir adalah dasar untuk sepenuhnya memanfaatkan kekuatan PHP.
sumber
Jika Anda ingin membuat objek (seperti dalam javascript) dengan properti dinamis, tanpa menerima peringatan properti tidak terdefinisi.
sumber
Anda dapat mencoba cara ini juga.
Keluaran:
sumber
Gunakan objek generik dan petakan pasangan nilai kunci untuk itu.
Atau melemparkan array ke objek
sumber
Jika Anda tidak ingin melakukan ini:
Anda dapat menggunakan salah satu dari yang berikut:
PHP> = 5.4
PHP <5.4
sumber
Berikut sebuah contoh dengan iterasi:
sumber
Anda memiliki teknik yang buruk namun bermanfaat ini:
sumber
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 Object, 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 tidak dapat mendefinisikan kelas bernama 'stdClass' dalam kode Anda. Nama itu sudah digunakan oleh sistem. Anda dapat mendefinisikan kelas bernama 'Objek'.
Anda bisa mendefinisikan kelas yang memperluas stdClass, tetapi Anda tidak akan mendapat manfaat, karena stdClass tidak melakukan apa-apa.
(diuji pada PHP 5.2.8)
sumber