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" <ma...@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 >> > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php