In php 8.0: unable to distinguish between instance variable being null and unset
[email protected] (Emiel Mols)
| Newsgroups | php.general |
|---|---|
| Message-ID | <CAF5w505WtB+hDqtP=DgmDrfVaRwPy+P5YkR23mOzUgLcTcHicQ@mail.gmail.com> |
Hello,
Our codebase depends on distinguishing whether an instance variable is
unset, or simply null:
class C { public int $v = 123; }
$x = new C; unset($x->v);
$y = new C; $u->v = null;
In php <8.0 we made this work with @array_key_exists($x, 'v'), which
stopped working. isset($x->x) doesn't work, as it will return true for
'null' as well. property_exists($x, 'v') will always return true as long as
the variable is declared: php-src here
<https://github.com/php/php-src/blob/a13730c5e465b3c349a7970d15a49e4e132d4e07/Zend/zend_builtin_functions.c#L943>
.
Apart from using debug_zval_dump (too expensive), any hints? This feels
like quite the oversight honestly :).
Best,
Emiel