Re: In php 8.0: unable to distinguish between instance variable beingnull and unset

From: Date: Sat, 04 Sep 2021 20:06:51 +0000
Subject: Re: In php 8.0: unable to distinguish between instance variable beingnull and unset
References: 1 2  Groups: php.general 
Request: Send a blank email to php-general+get-327651@lists.php.net to get a copy of this message
Was missing a ? there. Updated case at https://3v4l.org/rH4p4 On Sat, 4 Sep 2021 at 21:30, Ben Ramsey <ramsey@php.net> wrote: > Emiel Mols wrote on 9/3/21 07:08: > > 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 > > > > If you use public int $v, there shouldn't be a way to set > it null, > unless I'm missing something. > > https://3v4l.org/nNDq4 > > Cheers, > Ben > >

« previous php.general (#327651) next »