Chris@13: [ Chris@13: 'var' => [], Chris@13: '...' => [ Chris@13: 'isOptional' => true, Chris@13: 'defaultValue' => null, Chris@13: ], Chris@13: ], Chris@13: Chris@13: 'unset' => [ Chris@13: 'var' => [], Chris@13: '...' => [ Chris@13: 'isOptional' => true, Chris@13: 'defaultValue' => null, Chris@13: ], Chris@13: ], Chris@13: Chris@13: 'empty' => [ Chris@13: 'var' => [], Chris@13: ], Chris@13: Chris@13: 'echo' => [ Chris@13: 'arg1' => [], Chris@13: '...' => [ Chris@13: 'isOptional' => true, Chris@13: 'defaultValue' => null, Chris@13: ], Chris@13: ], Chris@13: Chris@13: 'print' => [ Chris@13: 'arg' => [], Chris@13: ], Chris@13: Chris@13: 'die' => [ Chris@13: 'status' => [ Chris@13: 'isOptional' => true, Chris@13: 'defaultValue' => 0, Chris@13: ], Chris@13: ], Chris@13: Chris@13: 'exit' => [ Chris@13: 'status' => [ Chris@13: 'isOptional' => true, Chris@13: 'defaultValue' => 0, Chris@13: ], Chris@13: ], Chris@13: ]; Chris@13: Chris@13: /** Chris@13: * Construct a ReflectionLanguageConstruct object. Chris@13: * Chris@13: * @param string $keyword Chris@13: */ Chris@13: public function __construct($keyword) Chris@13: { Chris@16: if (!self::isLanguageConstruct($keyword)) { Chris@13: throw new \InvalidArgumentException('Unknown language construct: ' . $keyword); Chris@13: } Chris@13: Chris@13: $this->keyword = $keyword; Chris@13: } Chris@13: Chris@13: /** Chris@13: * This can't (and shouldn't) do anything :). Chris@13: * Chris@13: * @throws \RuntimeException Chris@13: */ Chris@13: public static function export($name) Chris@13: { Chris@13: throw new \RuntimeException('Not yet implemented because it\'s unclear what I should do here :)'); Chris@13: } Chris@13: Chris@13: /** Chris@13: * Get language construct name. Chris@13: * Chris@13: * @return string Chris@13: */ Chris@13: public function getName() Chris@13: { Chris@13: return $this->keyword; Chris@13: } Chris@13: Chris@13: /** Chris@13: * None of these return references. Chris@13: * Chris@13: * @return bool Chris@13: */ Chris@13: public function returnsReference() Chris@13: { Chris@13: return false; Chris@13: } Chris@13: Chris@13: /** Chris@13: * Get language construct params. Chris@13: * Chris@13: * @return array Chris@13: */ Chris@13: public function getParameters() Chris@13: { Chris@13: $params = []; Chris@13: foreach (self::$languageConstructs[$this->keyword] as $parameter => $opts) { Chris@17: \array_push($params, new ReflectionLanguageConstructParameter($this->keyword, $parameter, $opts)); Chris@13: } Chris@13: Chris@13: return $params; Chris@13: } Chris@13: Chris@13: /** Chris@16: * Gets the file name from a language construct. Chris@16: * Chris@16: * (Hint: it always returns false) Chris@16: * Chris@16: * @return bool false Chris@16: */ Chris@16: public function getFileName() Chris@16: { Chris@16: return false; Chris@16: } Chris@16: Chris@16: /** Chris@13: * To string. Chris@13: * Chris@13: * @return string Chris@13: */ Chris@13: public function __toString() Chris@13: { Chris@13: return $this->getName(); Chris@13: } Chris@13: Chris@13: /** Chris@13: * Check whether keyword is a (known) language construct. Chris@13: * Chris@13: * @param string $keyword Chris@13: * Chris@13: * @return bool Chris@13: */ Chris@13: public static function isLanguageConstruct($keyword) Chris@13: { Chris@17: return \array_key_exists($keyword, self::$languageConstructs); Chris@13: } Chris@13: }