ugrás a tartalomhoz

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

kalamona · 2010. Feb. 2. (K), 13.23
Sziasztok!

// A variacio
if (empty($x)) echo 'Ures!';

// B variacio
if (!$x) echo '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.
<?php
header("Content-type: text/plain; charset=utf-8");
$falses = array(
  0,
  '0',
  NULL,
  FALSE,
  array(),
  '',
  '0x0'
);
foreach ($falses as $value) {
  $val = preg_replace('/\s+/', '', var_export($value, TRUE));
  print "empty($val) = ". var_export(empty($value), TRUE) ."\n";
  print "!$val = ". var_export(!$value, TRUE) ."\n\n";
}
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:
<?php
header("Content-type: text/plain; charset=utf-8");
print "empty(\$var) = ". var_export(empty($var), TRUE) ."\n";
print "!\$var = ". var_export(!$var, TRUE) ."\n";
$var;
print "empty(\$var) = ". var_export(empty($var), TRUE) ."\n";
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.

$x = "";
empty($x); // true

$x = 0;
"" == $x; // true

$x = null;
"" == $x; // true

$x = false;
"" == $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.