Re: [RFC][Vote] Typed Properties

From: Date: Thu, 26 May 2016 16:44:19 +0000
Subject: Re: [RFC][Vote] Typed Properties
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-93572@lists.php.net to get a copy of this message
Hi Thomas, On the face of it, I'm not enthusiastic to introduce new magic numbers (which would be false, 0, 0.0, "", and [], right?) that PHP assigns when coercing a typed, uninitialized property read by a file in liberal mode. This is like taking the most confusing thing about 7.0's dual-mode, scalar type declaration of function arguments and boosting the confusion power. I would want a new name for this complement-of-strict mode. "Weak" and "liberal" don't quite do it. Promiscuous mode? ;) Tom On 5/26/16, 10:40 AM, "Thomas Bley" <mails@thomasbley.de> wrote: >I think strict_types=1 should give a fatal error for accessing >non-initialized typed properties, instead of notice. >Example: > >declare(strict_types=1); > >class A { > public int $x; > public ?int $y = null; > public int $z = 42; > public ?int $u; > public ?datetime $v; > public datetime $w; >} > >$a = new A; >var_dump($a->x); // Fatal error, uninitialized... >var_dump($a->y); // null >var_dump($a->z); // 42 >var_dump(isset($a->z)); // true >unset($a->z); >var_dump(isset($a->z)); // false >var_dump($a->z); // Fatal error, uninitialized... >var_dump($a->u); // Fatal error, uninitialized... >var_dump($a->v); // Fatal error, uninitialized... >var_dump($a->w); // Fatal error, uninitialized... > >var_dump(isset($a->x)); // false >var_dump(isset($a->y)); // false >var_dump(isset($a->u)); // false >var_dump(isset($a->v)); // false >var_dump(isset($a->w)); // false > >Regards >Thomas > >Tom Worster wrote on 26.05.2016 15:53: > >> On 5/25/16 5:52 PM, Thomas Bley wrote: >>> I'm not seeing a problem here: >>> >>> class A { >>> public int $x; >>> public ?int $y = null; >>> public int $z = 42; >>> public ?int $u; >>> public ?datetime $v; >>> public datetime $w; >>> } >>> >>> $a = new A; >>> var_dump($a->x); // 0 + notice >>> var_dump($a->y); // null >>> var_dump($a->z); // 42 >>> var_dump(isset($a->z)); // true >>> unset($a->z); >>> var_dump(isset($a->z)); // false >>> var_dump($a->z); // 0 + notice >>> var_dump($a->u); // null + notice >>> var_dump($a->v); // null + notice >>> var_dump($a->w); // Fatal error, uninitialized... >>> >>> var_dump(isset($a->x)); // false >>> var_dump(isset($a->y)); // false >>> var_dump(isset($a->u)); // false >>> var_dump(isset($a->v)); // false >>> var_dump(isset($a->w)); // false >> >> Is the file containing these examples in liberal mode? >> >> What changes if declare(strict_types=1) precedes $a = new A;? >> >> Tom >> >

« previous php.internals (#93572) next »