| 1 | <?php | ||
| 18 | trait StateMiddlewareDependencyTrait | ||
| 19 | { | ||
| 20 | /** | ||
| 21 | * @var MiddlewareState | ||
| 22 | */ | ||
| 23 | private $state; | ||
| 24 | |||
| 25 | /** | ||
| 26 | * @see \Romm\Formz\Middleware\Signal\SendsMiddlewareSignal::dispatchBeforeSignal() | ||
| 27 | */ | ||
| 28 | final public function dispatchBeforeSignal() | ||
| 29 |     { | ||
| 30 |         if (false === $this instanceof SendsMiddlewareSignal) { | ||
| 31 | // @todo exception | ||
| 32 | } | ||
| 33 | |||
| 34 | /** @var SendsMiddlewareSignal $this */ | ||
| 35 | $this->state->dispatchBeforeSignal($this); | ||
|  | |||
| 36 | } | ||
| 37 | |||
| 38 | /** | ||
| 39 | * @see \Romm\Formz\Middleware\Signal\SendsMiddlewareSignal::dispatchAfterSignal() | ||
| 40 | */ | ||
| 41 | final public function dispatchAfterSignal() | ||
| 42 |     { | ||
| 43 |         if (false === $this instanceof SendsMiddlewareSignal) { | ||
| 44 | // @todo exception | ||
| 45 | } | ||
| 46 | |||
| 47 | /** @var SendsMiddlewareSignal $this */ | ||
| 48 | $this->state->dispatchAfterSignal($this); | ||
| 49 | } | ||
| 50 | |||
| 51 | /** | ||
| 52 | * @param MiddlewareState $middlewareState | ||
| 53 | */ | ||
| 54 | final public function attachMiddlewareState(MiddlewareState $middlewareState) | ||
| 58 | } | ||
| 59 | |||
| 60 | |||
| 61 | 
If you access a property on an interface, you most likely code against a concrete implementation of the interface.
Available Fixes
Adding an additional type check:
Changing the type hint: