Doc #55164 [Com]: Unclear/incorrect description of "casting to null"
| From: | frozenfire at thefrozenfire dot com | 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