> Regarding $field vs. $this->propName, there's a few reasons we went that > route. > > 1. It's shorter and less typing for what will be a common pattern. > 2. That makes it consistent between hook implementations. In working on > examples, I found many cases where I was adding basically the same line to > multiple hooks on the same class. Making the code easier to copy-paste seems > like a win. > 3. It also will be helpful if hook packages are added in the future, as > they'll need a more "generic" way to access the backing property. (See > Future Scope.) Eg, "$field = someLogic($value)" applied to a dozen different > properties; it wouldn't work if it was "$this->specificProperty = > someLogic($value)". > 4. We're used to our eyes glossing over "$this->propName", as it's so common. > Having a separate name to mentally scan for to determine if a property is > virtual or not seems like it will be helpful in practice. > 5. There's precedent for it: Kotlin has almost the same functionality as we > describe here, and uses a `field` variable in the exact same way. > > So it's mainly an ergonomics argument rather than a technical one. "Compile > time macro" means it translates to the same AST as if you'd used > $this->propName. There's precedent for that. Constructor Property Promotion > works basically the same way.
With using a common name for say, $value, open the door for a library of common hook implementations (eventually)? Maybe something like: class User { // snip public string $fullName { get => FancyLibrary\fullName(...) } // snip } I could imagine something like this would be a huge boon to PHP if it automatically bound the closure. -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php