> -----Ursprüngliche Nachricht----- > Von: Rowan Collins > Gesendet: Mittwoch, 19. September 2018 23:47 > An: PHP Internals List > Betreff: Re: [PHP-DEV] [RFC] [VOTE] Typed properties v2 > > On 19/09/2018 22:30, Marco Pivetta wrote: > > > > At least the approach without nullable properties will lead to a > > Throwable when a read is attempted on an uninitialized object, which > > is still better than nullability checks all over the place. > > > Is it? Doesn't it just mean writing this: > > try { > someFunction($object->propertyThatClaimsToBeNonNullable); > } catch ( TypeError $e ) { > ... > } > > Instead of this: > > if ( ! is_null($object->propertyThatClaimsToBeNonNullable) ) { > someFunction($object->propertyThatClaimsToBeNonNullable); > } else { > ... > } > > For that matter, all I need to do is define someFunction as taking a > non-nullable parameter, and I get the TypeError either way. > > Surely the point of a non-nullable property shouldn't be "it gives a > slightly different error if it's not set", it should be "you don't have > to worry about this not being set, because the language will enforce > that somewhere". (And to cover your last point, that somewhere doesn't > need to be the constructor, if requiring that is really such a big problem.) > > Regards, > > -- > Rowan Collins > [IMSoP] >
Just an idea: If an object is initialized without having all non-nullable properties initialized, one could store the instantiation place, and give this hint if an uninitialized property is accessed later. Example: // User.php class User { public Group $group; } // functions.php function initUser() { $user = new User(); // store this line and filename internally, because User::$group is uninitialized return $user; } // index.php $user = initUser(); echo $user->group->name; // Throws TypeError informing about access on uninitialized property and that it was initialized in file functions.php at line 3. The TypeError still occurs but it makes it easy to find and fix the issue. And the same could be done with unsetting - save the place where an non-nullable property has been unsetted and inform the user where it happened if the unsetted property is accessed. Best regards Mit freundlichen Grüßen aus Paderborn Christian Stoller Web-Entwicklung LEONEX Internet GmbH Technologiepark 6 33100 Paderborn Tel: +49 (5251) 4142-526 Fax: +49 (5251) 4142-501 HRB 8694 AG Paderborn Geschäftsführer: Stephan Winter ________________________________ LEONEX ist umgezogen: Bitte beachten Sie unsere neue Adresse sowie unsere neuen Rufnummern. Wann dürfen wir Sie in unsere neuen Räumlichkeiten einladen? ________________________________