| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- <?php
- /*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Psy\Reflection;
- /**
- * A fake ReflectionFunction but for language constructs.
- */
- class ReflectionLanguageConstruct extends \ReflectionFunctionAbstract
- {
- public $keyword;
- /**
- * Language construct parameter definitions.
- */
- private static $languageConstructs = [
- 'isset' => [
- 'var' => [],
- '...' => [
- 'isOptional' => true,
- 'defaultValue' => null,
- ],
- ],
- 'unset' => [
- 'var' => [],
- '...' => [
- 'isOptional' => true,
- 'defaultValue' => null,
- ],
- ],
- 'empty' => [
- 'var' => [],
- ],
- 'echo' => [
- 'arg1' => [],
- '...' => [
- 'isOptional' => true,
- 'defaultValue' => null,
- ],
- ],
- 'print' => [
- 'arg' => [],
- ],
- 'die' => [
- 'status' => [
- 'isOptional' => true,
- 'defaultValue' => 0,
- ],
- ],
- 'exit' => [
- 'status' => [
- 'isOptional' => true,
- 'defaultValue' => 0,
- ],
- ],
- ];
- /**
- * Construct a ReflectionLanguageConstruct object.
- *
- * @param string $keyword
- */
- public function __construct($keyword)
- {
- if (!self::isLanguageConstruct($keyword)) {
- throw new \InvalidArgumentException('Unknown language construct: ' . $keyword);
- }
- $this->keyword = $keyword;
- }
- /**
- * This can't (and shouldn't) do anything :).
- *
- * @throws \RuntimeException
- */
- public static function export($name)
- {
- throw new \RuntimeException('Not yet implemented because it\'s unclear what I should do here :)');
- }
- /**
- * Get language construct name.
- *
- * @return string
- */
- public function getName()
- {
- return $this->keyword;
- }
- /**
- * None of these return references.
- *
- * @return bool
- */
- public function returnsReference()
- {
- return false;
- }
- /**
- * Get language construct params.
- *
- * @return array
- */
- public function getParameters()
- {
- $params = [];
- foreach (self::$languageConstructs[$this->keyword] as $parameter => $opts) {
- \array_push($params, new ReflectionLanguageConstructParameter($this->keyword, $parameter, $opts));
- }
- return $params;
- }
- /**
- * Gets the file name from a language construct.
- *
- * (Hint: it always returns false)
- *
- * @return bool false
- */
- public function getFileName()
- {
- return false;
- }
- /**
- * To string.
- *
- * @return string
- */
- public function __toString()
- {
- return $this->getName();
- }
- /**
- * Check whether keyword is a (known) language construct.
- *
- * @param string $keyword
- *
- * @return bool
- */
- public static function isLanguageConstruct($keyword)
- {
- return \array_key_exists($keyword, self::$languageConstructs);
- }
- }
|