Doc #55164 [Com]: Unclear/incorrect description of "casting to null"

From: Date: Thu, 12 Jan 2012 04:21:46 +0000
Subject: Doc #55164 [Com]: Unclear/incorrect description of "casting to null"
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-7769@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=55164&edit=1 ID: 55164 Comment by: frozenfire at thefrozenfire dot com Reported by: deceze at gmail dot com Summary: Unclear/incorrect description of "casting to null" Status: Analyzed Type: Documentation Problem Package: Documentation problem PHP Version: Irrelevant Block user comment: N Private report: N New Comment: I believe the major distinction between the various states of the variable has to do not with the value, but rather its presence in the symbol table. When you assign null to a variable, it is still in the symbol table. When you cast it to unset, it's still in the symbol table until the operation finishes. When you unset it, it's removed from the symbol table, thus becoming "undefined". I'll see about confirming my suspicions through inspection of the source. Previous Comments: ------------------------------------------------------------------------ [2011-07-08 21:53:07] deceze at gmail dot com Yes, but: error_reporting(E_ALL); var_dump($undefined); $foo = 'bar'; $foo = (unset)$foo; // or $foo = null var_dump($foo); unset($foo); var_dump($foo); Outputs: Notice: Undefined variable: undefined NULL NULL Notice: Undefined variable: foo NULL null is the default value for undefined variables, but undefined/"removed" variables are not the same as variables with a null value. ------------------------------------------------------------------------ [2011-07-08 21:47:26] philip@php.net Simply this: <?php var_dump($undefined); ?> Outputs NULL. ------------------------------------------------------------------------ [2011-07-08 21:40:14] deceze at gmail dot com $b = (unset)$a in itself is quite weird, since it doesn't unset either $a or $b, it just assigns null to $b. ------------------------------------------------------------------------ [2011-07-08 21:35:45] philip@php.net I agree there is a bug here, but you can cast something to null using (unset) so: $a = "foo"; $b = "bar"; $b = (unset) $a; var_dump($b); NULL Slightly odd that it's (unset) and not (null) but it is what it is. That section should refer to the (unset) documentation within the type juggling documentation. ------------------------------------------------------------------------ [2011-07-08 21:18:01] deceze at gmail dot com Description: ------------ The documentation at http://www.php.net/manual/en/language.types.null.php states: "Casting a variable to null will remove the variable and unset its value." This seems incorrect and/or misleading. "Casting" to null is not possible as such through the cast syntax (null). Setting the type of a variable using settype($foo, 'null') or assigning null to any variable will not "remove" the variable. The variable continues to exist with the value null. Test script: --------------- // the documentation suggests something like this: $foo = 'bar'; settype($foo, 'null'); echo $foo; // PHP Notice: Undefined variable: foo // actual behavior: $foo = 'bar'; settype($foo, 'null'); echo $foo; // empty output, no warning ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=55164&edit=1

« previous php.doc.bugs (#7769) next »