*/ private $options; /** * @var string[] */ private $flagList; /** * @var string[] */ private $argumentList; public function __construct(?array $options, ?array $flagList, ?array $argumentList) { $this->options = $options ?? []; $this->flagList = $flagList ?? []; $this->argumentList = $argumentList ?? []; } /** * @return array */ public function getOptions(): array { return $this->options; } /** * @return string[] */ public function getFlagList(): array { return $this->flagList; } /** * @return string[] */ public function getArgumentList(): array { return $this->argumentList; } /** * Has an option. */ public function hasOption(string $name): bool { return array_key_exists($name, $this->options); } /** * Get an option. */ public function getOption(string $name): ?string { return $this->options[$name] ?? null; } /** * Has a flag. */ public function hasFlag(string $name): bool { return in_array($name, $this->flagList); } /** * Get an argument by index. */ public function getArgument(int $index): ?string { return $this->argumentList[$index] ?? null; } public static function fromArgs(array $args): self { $argumentList = []; $options = []; $flagList = []; foreach ($args as $i => $item) { if (strpos($item, '--') === 0 && strpos($item, '=') > 2) { list($name, $value) = explode('=', substr($item, 2)); $name = Util::hyphenToCamelCase($name); $options[$name] = $value; } else if (strpos($item, '--') === 0) { $flagList[] = Util::hyphenToCamelCase(substr($item, 2)); } else if (strpos($item, '-') === 0) { $flagList[] = substr($item, 1); } else if ($i > 0) { $argumentList[] = $item; } } return new self($options, $flagList, $argumentList); } }