ugrás a tartalomhoz

empty($x) === !$x ?

kalamona · 2010. Feb. 2. (K), 13.23
Sziasztok!
  1. // A variacio  
  2. if (emptyempty($x)) echo 'Ures!';  
  3.   
  4. // B variacio  
  5. if (!$xecho 'Ures!';  
A két variáció lényegében tök ugyanazt jelenti?

Köszönöm!
 
1

Nem ugyanaz

Poetro · 2010. Feb. 2. (K), 14.40
Az empty hamisat ad vissza 0, '0', NULL, FALSE, array() esetén is, és persze akkor is, ha a változó nincs deklarálva vagy nem kapott értéket, ugyanakkor a !$x E_NOTICE-t fog dobni.
  1. <?php  
  2. header("Content-type: text/plain; charset=utf-8");  
  3. $falses = array(  
  4.   0,  
  5.   '0',  
  6.   NULL,  
  7.   FALSE,  
  8.   array(),  
  9.   '',  
  10.   '0x0'  
  11. );  
  12. foreach ($falses as $value) {  
  13.   $val = preg_replace('/\s+/''', var_export($value, TRUE));  
  14.   print "empty($val) = ". var_export(emptyempty($value), TRUE) ."\n";  
  15.   print "!$val = ". var_export(!$value, TRUE) ."\n\n";  
  16. }  
empty(0) = true
!0 = true

empty('0') = true
!'0' = true

empty(NULL) = true
!NULL = true

empty(false) = true
!false = true

empty(array()) = true
!array() = true

empty('') = true
!'' = true
Ugyanakkor:
  1. <?php  
  2. header("Content-type: text/plain; charset=utf-8");  
  3. print "empty(\$var) = ". var_export(emptyempty($var), TRUE) ."\n";  
  4. print "!\$var = ". var_export(!$var, TRUE) ."\n";  
  5. $var;  
  6. print "empty(\$var) = ". var_export(emptyempty($var), TRUE) ."\n";  
  7. print "!\$var = ". var_export(!$var, TRUE) ."\n";  
empty($var) = true
<br />
<b>Notice</b>:  Undefined variable: var in <b>D:\htdocs\PHP-1.php</b> on line <b>4</b><br />
!$var = true
empty($var) = true
<br />
<b>Notice</b>:  Undefined variable: var in <b>D:\htdocs\PHP-1.php</b> on line <b>7</b><br />
!$var = true
2

Nem

Török Gábor · 2010. Feb. 2. (K), 14.47
A feltételben a kifejezés logikai igazságtartalmát vizsgálod. Ha booleantól eltérő típusú értéket vizsgálsz, a PHP automatikus típuskonverziót végez, és az üres stringre ("") hamisat kapsz.
  1. $x = "";  
  2. emptyempty($x); // true  
  3.   
  4. $x = 0;  
  5. "" == $x// true  
  6.   
  7. $x = null;  
  8. "" == $x// true  
  9.   
  10. $x = false;  
  11. "" == $x// true  
3

Automatikus tÍpuskonverszió

gphilip · 2010. Feb. 3. (Sze), 11.00
Automatikus tÍpuskonverszió esetén false értékre konvertálódnak az alábbi változók:

the boolean FALSE itself
the integer 0 (zero)
the float 0.0 (zero)
the empty string, and the string "0"
an array with zero elements
an object with zero member variables (PHP 4 only)
the special type NULL (including unset variables)
SimpleXML objects created from empty tags


Az empty az alábbi változókra igaz:
"" (an empty string)
0 (0 as an integer)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)


Praktikusan ugyanaz a kettő (némi eltéréssel), és azzal az igen fontos különbséggel, hogy inicializálatlan változóra a !$valtozo notice-okat fog dobálni! Az empty nem.