Seperti yang kita ketahui, membuat objek anonim dalam JavaScript itu mudah, seperti kode di bawah ini:
var object = {
p : "value",
p1 : [ "john", "johnny" ]
};
alert(object.p1[1]);
Keluaran:
an alert is raised with value "johnny"
Bisakah teknik yang sama diterapkan dalam PHP? Bisakah kita membuat objek anonim di PHP?
Jawaban:
Sudah beberapa tahun, tapi saya pikir saya perlu menjaga informasi tetap terbaru!
Sejak PHP 7 memungkinkan untuk membuat kelas anonim, sehingga Anda dapat melakukan hal-hal seperti ini:
Anda dapat membaca lebih lanjut tentang ini di manual
Tapi saya tidak tahu seberapa mirip itu diterapkan ke JavaScript, jadi mungkin ada beberapa perbedaan antara kelas anonim dalam JavaScript dan PHP.
sumber
"Anonim" bukanlah terminologi yang benar ketika berbicara tentang objek. Akan lebih baik untuk mengatakan "objek tipe anonim ", tetapi ini tidak berlaku untuk PHP.
Semua objek di PHP memiliki kelas. Kelas "default" adalah
stdClass
, dan Anda dapat membuat objek dengan cara ini:Anda juga dapat memanfaatkan casting array ke objek untuk sintaksis yang lebih nyaman:
Namun, maklum bahwa casting array ke objek cenderung menghasilkan hasil "menarik" untuk kunci array yang bukan nama variabel PHP yang valid - misalnya, inilah jawaban saya yang menunjukkan apa yang terjadi ketika kunci dimulai dengan angka.
sumber
Ya itu mungkin! Menggunakan kelas Objek PHP Anonim sederhana ini . Bagaimana itu bekerja:
Tentu saja objek ini adalah turunan dari
AnObj
kelas, sehingga tidak benar-benar anonim, tetapi memungkinkan untuk mendefinisikan metode dengan cepat, seperti JavaScript lakukan.sumber
Sampai baru-baru ini adalah bagaimana saya membuat objek dengan cepat.
Kemudian:
Tapi sekarang saya pergi dengan:
Maka seperti sebelumnya:
Tentu saja jika Anda sudah tahu properti dan nilai-nilai Anda dapat mengaturnya seperti yang telah disebutkan:
NB: Saya tidak tahu versi PHP mana ini bekerja sehingga Anda harus memperhatikan hal itu. Tapi saya pikir pendekatan pertama (yang juga singkat jika tidak ada properti untuk ditetapkan pada konstruksi) harus bekerja untuk semua versi yang memiliki json_encode / json_decode
sumber
Konversi array ke objek (tapi ini tidak rekursif ke sub-anak):
sumber
Jika Anda ingin meniru JavaScript, Anda bisa membuat kelas
Object
, dan dengan demikian mendapatkan perilaku yang sama. Tentu saja ini bukan lagi anonim, tetapi akan berhasil.Itu akan menampilkan elemen 2 . Ini dicuri dari komentar di PHP: Kelas dan Objek .
sumber
Dukungan untuk kelas anonim telah tersedia sejak PHP 7.0, dan merupakan analog terdekat dengan contoh JavaScript yang disediakan dalam pertanyaan.
Deklarasi visibilitas pada properti tidak dapat dihilangkan (saya hanya menggunakan
var
karena lebih pendek daripublic
).Seperti JavaScript, Anda juga dapat menentukan metode untuk kelas:
sumber
Dari dokumentasi PHP, beberapa contoh lagi:
$ obj1 dan $ obj3 adalah tipe yang sama, tetapi $ obj1! == $ obj3. Selain itu, ketiganya akan json_encode () ke objek JS sederhana {}:
Output:
https://www.php.net/manual/en/language.types.object.php
sumber
Jika Anda ingin membuat objek (seperti dalam javascript) dengan properti dinamis, tanpa menerima peringatan properti tidak terdefinisi, saat Anda belum menetapkan nilai ke properti
sumber
Tidak - karena javascript menggunakan prototipe / pernyataan langsung objek - dalam PHP (dan banyak bahasa OO lainnya) objek hanya dapat dibuat dari kelas.
Jadi pertanyaannya menjadi - dapatkah Anda membuat kelas anonim.
Sekali lagi jawabannya adalah tidak - bagaimana Anda akan membuat instance kelas tanpa bisa referensi itu?
sumber
Object var = new Object() { ... };
- C ++:class { ... } var;
Untuk orang yang menginginkan objek rekursif:
sumber
Anoynmus objek wiki
sumber