> Can you expand a bit on how you think distinguishing "undefined" from
"null" would help?
First off, I would be perfectly happy if undefined array/object index
accesses went back to raising E_NOTICE. Undefined variables already resolve
to NULL so in that sense NULL is already the "undefined" primitive.
That said, if PHP were to introduce an `undefined` primitive, here's what I
think would change:
- NULL remains, and as such represents an "empty", yet defined, value.
- Undefined variables and array/object accesses now resolve to "undefined"
- `$var = undefined` is the equivalent of calling unset($var)
- Biggest breaking change would probably be `$undefinedVar === null` is no
longer true
<?php
// Here's how I think it would look in code
null === undefined; // false
null == undefined; // true
isset($undy); // false
$undy; // undefined, no error
$undy === undefined; // true
$arr = [];
$arr['foo']; // undefined, no error
$obj = (object)[];
$obj->prop; // undefined, no error
$undy->method(); // fatal error
function($param = undefined) {} // fatal error
// more difficult scenarios...
// JavaScript would throw an error
// classic PHP behavior would resolve to null, therefore now undefined
// either is arguably valid, latter would create need for optional chaining
$undy['key']; // ?
$undy->prop; // ?