go to bug id or search bugs for
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`.
// the documentation suggests something like this:
$foo = 'bar';
echo $foo; // PHP Notice: Undefined variable: foo
// actual behavior:
$foo = 'bar';
echo $foo; // empty output, no warning
Add a Patch
Add a Pull Request
I agree there is a bug here, but you can cast something to null using (unset)
$a = "foo";
$b = "bar";
$b = (unset) $a;
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.
`$b = (unset)$a` in itself is quite weird, since it doesn't `unset` either `$a` or
`$b`, it just assigns `null` to `$b`.
$foo = 'bar';
$foo = (unset)$foo; // or $foo = null
Notice: Undefined variable: undefined
Notice: Undefined variable: foo
`null` is the default value for undefined variables, but undefined/"removed"
variables are not the same as variables with a `null` value.
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.
Rather, it seems that the confusion here is with what (unset) casting does. It's
not meant to unset a variable, but rather to cast it to null. That casting type
exists purely for completeness, and you may as well just use NULL.
The way to undefine a variable is through the language construct unset. Perhaps
I'll make a note in the unset() function reference that it's unrelated to unset-
casting, and remove that errant example.
Automatic comment from SVN on behalf of frozenfire
Log: Clarified highly-misleading (unset) casting example. Resolves bug #55164.
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.
Thank you for the report, and for helping us make our documentation better.