{$name}; } throw new \TypeError("undefined property {$name}"); } /** * Make and instance * * @param int|null $id The node menu id. * @param int $type The node menu type. * @param bool $published The node menu published. * @param string $title The node menu title. * @param array $link The node menu link. * * @throws \RuntimeException If $type or $data is wrong. */ public static function make(?int $id, int $type, bool $published, string $title, array $link): self { self::assertTypeIsCorrect($type); $menuNode = new self(); // @phpstan-ignore-next-line $menuNode->id = ! is_null($id) ? $id : 1; // @phpstan-ignore-next-line $menuNode->type = MenuNodeType::make($type); // @phpstan-ignore-next-line $menuNode->published = $published; // @phpstan-ignore-next-line $menuNode->title = $title; // @phpstan-ignore-next-line $menuNode->link = new Link(...$link); return $menuNode; } /** * Assert Type is correct * * @throws \RuntimeException If $type is wrong. */ public static function assertTypeIsCorrect(int $type): void { try { $type = MenuNodeType::make($type); } catch (\BadMethodCallException $e) { throw new \RuntimeException($e->getMessage()); } } }