Yeterince boş () və ya isset () istifadə olunur?

Qeyd Boş ()isset () haqqında çox şeyləri bilirəm ki, onlardan istifadə etmək üçün ən düzgün və effektiv bir üsuldur.

Mən yalnız php.net-də bu cümləni empty() linki ilə gördüm:

Değişken yoksa bir uyarı oluşturulmaz. Budur boş () əsasən qısa bir ekvivalentdir ! isset ($ var) || $ var == yanlış .

Yenə də, başqaları üçün başqalarına müraciət edirəm (tək-tək layihələr, cms və hətta çərçivələrdən istifadə edən saytlar), insanların bir çox dəfə yazdığını gördüm:

 if (isset ($var)  $var != '') // or if (isset ($var)  !empty($var)) 

(əsasən $ _GET və $ _POST dəyişənləri ilə deyil, yalnız)

Öğreticiyi başa düşdüyüm kimi parçacıq aşağıda:

 if (!empty($var)) 

Yoxsa bir şey itkin? Değişkenin varlığını test etmek üçün teknik olarak en yaxşı yolu nedir?

Mən həm funksiyaları, həm də onların təyinatını bilirəm. Yalnız müəyyən bir dəyişən müəyyən bir dəyər olub-olmadığını yoxlamaq üçün empty() tələb edirəm. Bilirəm ki, işləyir, amma 100% düzgün və təhlükəsizdir?

24
09 дек. foren 09 dek. 2014-12-09 17:02 '14 at 17:02 2014-12-09 17:02
@ 6 cavablar

isset($var) !empty($var)

 line # * op fetch ext return operands --------------------------------------------------------------------------------- 3 0 > EXT_STMT 1 ISSET_ISEMPTY_VAR 12800000 ~0 !0 2 > JMPZ_EX ~0 ~0, ->6 3 > ISSET_ISEMPTY_VAR 11800000 ~1 !0 4 BOOL_NOT ~2 ~1 5 BOOL ~0 ~2 6 > FREE ~0 4 7 > RETURN 1 

!empty($var)

 line # * op fetch ext return operands --------------------------------------------------------------------------------- 3 0 > EXT_STMT 1 ISSET_ISEMPTY_VAR 11800000 ~0 !0 2 BOOL_NOT ~1 ~0 3 FREE ~1 4 4 > RETURN 1 

Bəli, o, ISSET_ISEMPTY_VAR təkrarlayır, amma! $empty . Bu keçmiş dəyərdən asılıdır, amma mövcud deyildir, üst yol BOOL_NOT dan az bir opcode BOOL_NOT . lakin əgər varsa, daha aşağı yol daha sürətli olur.

Hər hansı bir tətbiqdə bu bir darboğaz olacağını ehtimal etməsə də

19
09 дек. Cavab 09 dekabrda exussum verilir . 2014-12-09 17:22 '14 da 17:22 2014-12-09 17:22

empty kifayətdir, amma təsirindən çəkin.

Əgər $var 0 , '0' , false , '' , [] , null (və ehtimal ki, unutduğum bir neçə digər) isset əlbəttə bir isset sayılır, ancaq empty . '0' simli xüsusi bir səhv olduğunu unutmayın.

border=0

Şəxsən isset istifadə edirəm. empty olmayan bir dəyər tələb olunarsa, mən onu ayrı-ayrılıqda yoxlayıram və istifadəçi üçün "bu dəyər tələb olunur", sadə, dəqiq bir səhv vermək üçün bir səhv (müvafiq səhvlərin idarə edilməsi blokları tərəfindən tutulur) verəcəyəm.

13
09 дек. Cavab Niet Dark Absol 09 dekabr verilir . 2014-12-09 17:09 '14 at 17:09 2014-12-09 17:09

isset , dəyişəndən asılı olmayaraq (null, false, və s.) dəyərindən asılı olub olmadığını sizə xəbər verəcəkdir.

Qiyməti yoxlamaq istəyirsinizsə, boş bir dize yox, boş, yanlış və ya empty istifadə etmək üçün 0 deyil.

4
09 дек. Cavab atəşə verilir 09 dekabr. 2014-12-09 17:08 '14 at 17:08 2014-12-09 17:08

Əgər istifadə edirsinizsə! (boş ($ var), dəyişən müəyyən edilir və boş ola bilər, məsələn, "" və ya null və ya 0 ola bilər.

 if(!empty($_COOKIE['dev'])) echo 'developer mode'; 

Çerez mövcud olduqda, ya boş, ya da hər hansı bir dəyəri ilə doludur, şərt doğrudur. Əks təqdirdə göz ardı ediləcək.

Bu, dizilərlə işləyərkən və açarın xəbərdarlıqların qarşısını almaq üçün təyin olunduğunu bilmirsinizsə, bu faydalıdır.

3
09 дек. Markus Zeller tərəfindən verilmiş cavab 09 dekabr. 2014-12-09 17:21 '14 da 17:21 2014-12-09 17:21

$ _POST və $ _GET'yi qiymətləndirərkən, isset və isempty arasında fərq istifadə etmək faydalıdır. Söylədiyiniz kimi, heç bir boş () var, bu isset və göndərilən dəyər deməkdir.

Beləliklə

 if (!empty($var)) 

etibarlı bir şəkildə

 if (isset ($var)  $var != '') 

Bəzən itkin olan şey bəzəndir

 if (isset($var)) { if ($var != '') { } else { ... do "A" } } else { ... do something different from "A" } 

Buna ehtiyacınız ola bilər. Əgər bu baş verərsə tez-tez baş verərsə, sadəcə iki şəraiti birləşdirin və boş () unutun. Artıq tapdınız. Hesab edirəm ki, yalnız "boş" istifadə edərək, daha sürətli ola bilər, amma içəridə, yəqin ki, eyni çekləri yerinə yetirir.

3
09 дек. AndreaBogazzi tərəfindən verilmiş cavab 09 dekabr . 2014-12-09 17:30 '14 saat 17:30 'da 2014-12-09 17:30

GET / POST / COOKIE dəyişənləri filter_input ilə filter_input . Bu funksiya müəyyən bir girişin daxilində olub (GET / POST / COOKIE / s) və ehtimal ki, onun filtrləşməsini yoxlaya bilər. Məsələn:

 $id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);  if ($id !== NULL  $id !== FALSE) {  } 

Digər tərəfdən, empty() funksiyası sadəcə dəyişən və ya yanlış olub olmadığını yoxlayır. Bu funksiya, yalan dəyərlərinin məna qazandığı hallarda istifadə edilə bilməz:

 if (empty($_GET["number_of_children"])) {  } if (empty($_GET["number_of_children"]) === false) {  } 
2
09 дек. Cavab Salman A 09 dekabr tərəfindən verilir . 2014-12-09 20:44 '14 saat 20:44 2014-12-09 20:44

tags ilə bağlı digər suallar və ya sual