2010-08-31 10 views
7

Jeśli dostanę zmienną i nie wiem, jest ona ustawiona czy nie mogę napisaćPHP praktyki kodowania

if (isset($a) && $a > 2) 

czy mogę napisać

if (@ $a > 2) 

który jest krótszy. Czy druga składnia jest dobra, czy nie?

+0

jeśli $ a jest ustawiony i nie fałszywe lub zerowa – Andrew

+0

@Andrew to, co myślałem, ale to wydaje się zbyt ogólnie wszelkich warunkowe. Prawdopodobnie lepiej użyć po prostu! = False lub jeśli jest to liczba> 0 lub jeśli jego ciąg sprawdza jego długość> 0 lub coś podobnego. – Chris

+0

w zależności od tego, co chcesz zezwolić na $ a, może być tym, czego szukasz, (http://de2.php.net/manual/en/function.empty.php). – Gordon

Odpowiedz

10

I totally sympathize, ale tłumienie błędu przy użyciu @jest złą praktyką.

Błąd nadal występuje, po prostu zostaje wyłączony. Kosztuje to mikroskopijne ilości czasu, które jednak mogą się znacznie skumulować, jeśli zostaną wykonane w pętlach.

Ponadto, odbierasz możliwość używania "nieokreślonej zmiennej" na swoją korzyść: Jako mechanizm unikania literówek.

15

Wyrażenie if(@$a) nie sprawdza, czy zmienna jest ustawiona, czy nie. Symbol @ po prostu przerasta wszelkie ostrzeżenia, które są złym stylem kodowania.

2

Funkcja isset sprawdza, czy zmienna istnieje i czy nie jest pusta. Nie jestem do końca pewien, co chcesz osiągnąć dzięki & & $ a.

Operator @ wyłącza komunikaty o błędach wygenerowane przez wyrażenie, do którego zostało wcześniej dodane.

3

Pierwszym podejściem jest właściwe podejście. Drugie podejście jest bardzo złe. skończysz z tłumieniem błędów i nawet nie wiesz. i pewnego dnia pojawią się błędy, że nie będziesz w stanie debugować tej złej praktyki.

2

Jak już powiedziano, pierwszy wariant to droga. Właściwie nie podoba mi się wariant (/ * */& & $ var), aby sprawdzić, czy zmienna jest pusta. Wolę za pomocą

if (isset($var) && !empty($var)) { 
    /* foo */ 
} 

czy tylko

if (!empty($var)) { 
    /* foo */ 
} 
+0

Jednak jeśli $ var jest" 0 ", to nie jest" puste ", ale nadal zwraca wartość true z' empty() '. Ta BĘDZIE ugryzie cię w zadzie w pewnym momencie. –

+0

Właściwie nie, ponieważ ja to wiem ...:-) Możesz dodać, że isset() pomija zmienną, jeśli jest ustawiona na NULL. Tak więc często musisz wykonać kontrole takie jak: 'if ((isset ($ x) && empty ($ x)) || is_null ($ x)) {/ * set Parametr procedury składowanej do String" NULL "* /}' Ale na pewno: Jeśli szukasz cyfry zero, to nie użyjesz pustego()! –

Powiązane problemy