Just nu i M3-nätverket
Gå till innehåll

null, undefined och unset


/randis

Rekommendera Poster

Hej!

 

Jag känner mej lite förbryllad.

 

Följande är saxat från http://se.php.net/null

A variable is considered to be NULL if

it has been assigned the constant NULL.

it has not been set to any value yet.

it has been unset().

 

Det är jag helt med på... MEN! När jag testat detta med följande exempel så får jag olika resultat.

 

$odefinerad = null;
[color="#0000ff"]echo[/color] $odefinerad;

Returnerar ingenting, precis som jag förväntar mej

 

[color="#0000ff"]echo[/color] $odefinerad;

Returnerar ett felmeddelande som säger att variabeln är undefined

 

$odefinerad = "testvärde";
[color="#0000ff"]unset[/color]($odefinerad);
[color="#0000ff"]echo[/color] $odefinerad;

Returnerar samma felmeddelande som ovanstående exempel.

 

Så vad kommer det sej att 3 variabler som ska vara samma som null inte beter sej likadant?

 

Länk till kommentar
Dela på andra webbplatser

Det beror på att du har felmeddelanden påslagna. Om man använder en odefinierad variabel får man en notis, dvs en rätt mild varning, men koden fortsätter att köras. Testa:

 

[color="#0000ff"]if[/color] ($undef === null) [color="#0000ff"]echo[/color] '$undef === null<br>';

$nulval = null;
[color="#0000ff"]if[/color] ($nulval === null) [color="#0000ff"]echo[/color] '$nulval === null<br>';

$[color="#0000ff"]unset[/color] = 1;
[color="#0000ff"]unset[/color]($[color="#0000ff"]unset[/color]);
[color="#0000ff"]if[/color] ($[color="#0000ff"]unset[/color] === null) [color="#0000ff"]echo[/color] '$[color="#0000ff"]unset[/color] === null<br>';

 

Om du lägger till raden

[color="#ff0000"]ini_set[/color]('display_errors', '0');

i början kommer felmeddelandena inte visas. (Det är normalt en bra idé att ha felmeddelanden påslagna när man utvecklar, men en dålig idé att ha dem påslagna på en publik server.)

 

Länk till kommentar
Dela på andra webbplatser

Först: Håller med föregående om

ini_set('display_errors', '0');
i produktionssystem.

 

NULL är inte samma sak som UNDEFINED ur PHP:s synvinkel MEN om man hämtar värdet från en odefinierad variabel blir svaret lika med NULL.

 

Exempel:

 

$odefinerad = null;

echo $odefinerad;

 

$odefinierad är definierad med värdet NULL alltså - inget felmeddelande, ECHO returnerar ingenting.

 

 

echo $odefinerad;

 

Returnerar ett felmeddelande eftersom variabeln inte är definierad. Felmeddelandet kommer dessutom innan själva ECHO-satsen exekveras.

 

 

$odefinerad = "testvärde";

unset($odefinerad);

echo $odefinerad;

 

Detta faller egentligen under ovanstående, eftersom variabeln $odefinierad tas bort från variabellistan genom "unset()" och blir odefinierad.

 

Dvs vill man kontrollera om en variabel är använd skall

isset($var)
användas och inte NULL.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...