Saya pikir potongan kode berikut ini akan berfungsi, tetapi tidak (Diedit: Sekarang berfungsi di PHP 5.5+) :
if (!empty($r->getError()))
Di mana getError()
sederhananya:
public function getError()
{
return $this->error;
}
Namun saya berakhir dengan kesalahan ini:
tidak dapat menggunakan nilai metode pengembalian dalam konteks tulis
Apa artinya ini? Bukankah ini hanya bacaan?
empty
: wiki.php.net/rfc/empty_isset_exprsif ( !$e->find('div') )
yang memeriksa apakah elemen HTML DOM saat ini kosong atau tidak. Saya menggunakannya di dalam loop untuk mencetak hanya satu Div tanpa Div bagian dalamnya.Jawaban:
empty()
perlu mengakses nilai dengan referensi (untuk memeriksa apakah referensi itu menunjuk ke sesuatu yang ada), dan PHP sebelum 5.5 tidak mendukung referensi ke nilai sementara yang dikembalikan dari fungsi.Namun, masalah sebenarnya yang Anda miliki adalah yang Anda gunakan
empty()
sama sekali, secara keliru percaya bahwa nilai "kosong" berbeda dari "salah".Kosong hanyalah alias untuk
!isset($thing) || !$thing
. Ketika hal yang Anda periksa selalu ada (dalam hasil panggilan fungsi PHP selalu ada),empty()
fungsi tidak lain adalah operator negasi .PHP tidak memiliki konsep kekosongan . Nilai yang mengevaluasi ke false adalah kosong, nilai-nilai yang mengevaluasi ke benar adalah tidak kosong. Itu adalah hal yang sama. Kode ini:
dan ini:
selalu memiliki hasil yang sama, dalam semua kasus, untuk semua tipe data (karena
$x
didefinisikanempty()
adalah redundan).Nilai kembali dari metode selalu ada (bahkan jika Anda tidak memiliki
return
pernyataan, nilai balik ada dan berisinull
). Karena itu:secara logis setara dengan:
sumber
(boolean) var
, kecuali bahwa tidak ada peringatan yang dihasilkan ketika variabel tidak disetel."""
,0
, dll "kosong", tapi tidak nol.Ini adalah batasan kosong () dalam versi PHP di bawah 5.5.
Anda harus mengubah ini
sumber
isset()
. yaitu:isset($this->foo->getBar())
akan menghasilkan masalah yang sama.Menurut dokumen PHP :
Anda tidak dapat menggunakan
empty()
secara langsung pada nilai pengembalian fungsi. Alih-alih, atur pengembalian darigetError()
ke variabel dan jalankanempty()
di variabel.sumber
Saya biasanya membuat fungsi global yang disebut is_empty () hanya untuk mengatasi masalah ini
Maka di mana saja saya biasanya menggunakan kosong () Saya hanya menggunakan is_empty ()
sumber
!
operator untuk ini? :)Seperti yang ditunjukkan oleh orang lain, itu adalah batasan (aneh) dari empty ().
Untuk sebagian besar tujuan, melakukan ini sama dengan memanggil kosong, tetapi ini berfungsi:
sumber
empty()
mencakup lebih banyak kemungkinan daripada hanya string kosongMasalahnya adalah ini, Anda ingin tahu apakah kesalahannya tidak kosong.
Menambahkan metode isErrorSet () akan menyelesaikan masalah.
Sekarang ini akan berfungsi dengan baik dengan kode ini tanpa pemberitahuan.
sumber
Cara alternatif untuk memeriksa apakah array kosong adalah:
Ini bekerja untuk saya tanpa kesalahan itu
sumber