On Thu, Mar 21, 2024, at 9:10 AM, Robert Landers wrote: > Hello, > > I'm a bit confused on inheritance. In the following example of a > proxy, do I need to be aware of a parent's hook and handle it > specially? > > class Loud > { > public string $name { > get { > return strtoupper($this->name); > } > } > } > > class LoudProxy extends Loud > { > public string $name { > get { > // detected the parent has a hook? // > $return = parent::$name::get(); > // do something with return // > return $return; > } > } > } > > what happens if the Loud class later removes its hook implementation > (ex: moves it to the set hook)? Will my proxy now cause an error? > > Would simply calling $this->name call the parents hook?
Per the RFC: "If there is no hook on the parent property, its default get/set behavior will be used. " so parent::$name::get() will "read the parent property", which will go through a hook if one is defined, and just read the raw value if not. So there is no detection logic needed, and the parent can add/remove a hook without affecting the child. Calling $this->name in LoudProxy's get hook will access backing property on LoudProxy itself, ignoring the parent entirely. --Larry Garfield