Saya mengerti PHP tidak memiliki variabel objek murni, tetapi saya ingin memeriksa apakah properti ada di objek atau kelas yang diberikan.
$ob = (object) array('a' => 1, 'b' => 12);
atau
$ob = new stdClass;
$ob->a = 1;
$ob->b = 2;
Di JS, saya bisa menulis ini untuk memeriksa apakah variabel a
ada di objek:
if ('a' in ob)
Dalam PHP, dapatkah hal seperti ini dilakukan?
Terima kasih banyak atas sarannya.
Jawaban:
property_exists (campuran $ class, string $ property)
isset (campuran $ var [, campuran $ ...])
Contoh 1:
Contoh 2:
sumber
empty()
solusi yang lebih baik?!empty($var)
?Untuk memeriksa apakah properti itu ada dan juga nol, Anda dapat menggunakan fungsinya
property_exists()
.Documents: http://php.net/manual/en/function.property-exists.php
Berbeda dengan isset (), property_exists () mengembalikan TRUE bahkan jika properti memiliki nilai NULL.
Contoh:
sumber
Baik isset atau property_exists bekerja untuk saya.
Saya akhirnya pergi dengan:
Contoh:
sumber
Larutan
echo $person->middleName ?? 'Person does not have a middle name';
Untuk menunjukkan bagaimana ini akan terlihat dalam pernyataan if untuk kejelasan lebih lanjut tentang bagaimana ini bekerja.
Penjelasan
Cara PHP tradisional untuk memeriksa keberadaan sesuatu adalah dengan melakukan:
ATAU untuk cara yang lebih spesifik kelas:
Keduanya baik-baik saja dalam bentuk pernyataan panjang tetapi dalam pernyataan ternary mereka menjadi tidak perlu rumit seperti:
isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
Anda juga dapat mencapai ini hanya dengan operator ternary seperti:
echo $person->middleName ?: 'Person does not have a middle name';
Tapi ... jika nilainya tidak ada (tidak disetel) itu akan menaikkan
E_NOTICE
dan bukan praktik terbaik. Jika nilainyanull
tidak akan meningkatkan pengecualian.Oleh karena itu operator ternary untuk penyelamatan membuat ini sedikit jawaban rapi:
echo $person->middleName ?? 'Person does not have a middle name';
sumber
Jika Anda ingin tahu apakah properti ada dalam instance kelas yang telah Anda tetapkan, cukup gabungkan
property_exists()
denganisset()
.sumber
property_exists($this, $property)
agak berlebihan di sini, karena kode Anda akan selalu memiliki hasil yang sama sepertiisset($this->$property)
sendirian.isset()
tidak dapat memberi tahu Anda apakah properti adalah anggota sebenarnya dari definisi kelas. Saya akan mencari lagi nanti untuk memastikan.__get()
dan lebih penting__isset()
metode sulap, hasilnya akan berbeda dalam beberapa kasus.Untuk memeriksa apakah sesuatu keluar, Anda dapat menggunakan fungsi PHP isset () lihat php.net . Fungsi ini akan memeriksa apakah variabel diatur dan bukan NULL.
Contoh:
Jika Anda perlu memeriksa apakah properti ada di kelas, maka Anda dapat menggunakan fungsi build in property_exists ()
Contoh:
sumber
Menggunakan array_key_exists () pada objek tidak digunakan lagi di php 7.4
Sebaliknya isset () atau property_exists () harus digunakan
referensi: php.net
sumber
Hanya menaruh 2 sen saya di sini.
Diberi kelas berikut:
berikut ini akan terjadi:
Semoga ini bisa membantu siapa saja
sumber