'before', 'args' => $args]; } public function after(object|string $target, mixed $result): mixed { self::$calls[] = ['event' => 'after', 'result' => $result]; return $result; } public static function clearCalls(): void { self::$calls = []; } public static function getLastBefore(): ?array { foreach (array_reverse(self::$calls) as $call) { if ($call['event'] === 'before') { return $call; } } return null; } public static function getLastAfter(): ?array { foreach (array_reverse(self::$calls) as $call) { if ($call['event'] === 'after') { return $call; } } return null; } }