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

Reply via email to