Just nu i M3-nätverket
Jump to content

null, undefined och unset


/randis

Recommended Posts

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?

 

Link to comment
Share on other sites

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.)

 

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...