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