123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- <?php
- /*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2020 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Psy\Reflection;
- /**
- * Somehow the standard reflection library doesn't include constants.
- *
- * ReflectionConstant_ corrects that omission.
- *
- * Note: For backwards compatibility reasons, this class is named
- * ReflectionConstant_ rather than ReflectionConstant. It will be renamed in
- * v0.10.0.
- */
- class ReflectionConstant_ implements \Reflector
- {
- public $name;
- private $value;
- private static $magicConstants = [
- '__LINE__',
- '__FILE__',
- '__DIR__',
- '__FUNCTION__',
- '__CLASS__',
- '__TRAIT__',
- '__METHOD__',
- '__NAMESPACE__',
- '__COMPILER_HALT_OFFSET__',
- ];
- /**
- * Construct a ReflectionConstant_ object.
- *
- * @param string $name
- */
- public function __construct($name)
- {
- $this->name = $name;
- if (!\defined($name) && !self::isMagicConstant($name)) {
- throw new \InvalidArgumentException('Unknown constant: '.$name);
- }
- if (!self::isMagicConstant($name)) {
- $this->value = @\constant($name);
- }
- }
- /**
- * Exports a reflection.
- *
- * @param string $name
- * @param bool $return pass true to return the export, as opposed to emitting it
- *
- * @return string|null
- */
- public static function export($name, $return = false)
- {
- $refl = new self($name);
- $value = $refl->getValue();
- $str = \sprintf('Constant [ %s %s ] { %s }', \gettype($value), $refl->getName(), $value);
- if ($return) {
- return $str;
- }
- echo $str."\n";
- }
- public static function isMagicConstant($name)
- {
- return \in_array($name, self::$magicConstants);
- }
- /**
- * Get the constant's docblock.
- *
- * @return false
- */
- public function getDocComment()
- {
- return false;
- }
- /**
- * Gets the constant name.
- *
- * @return string
- */
- public function getName()
- {
- return $this->name;
- }
- /**
- * Gets the namespace name.
- *
- * Returns '' when the constant is not namespaced.
- *
- * @return string
- */
- public function getNamespaceName()
- {
- if (!$this->inNamespace()) {
- return '';
- }
- return \preg_replace('/\\\\[^\\\\]+$/', '', $this->name);
- }
- /**
- * Gets the value of the constant.
- *
- * @return mixed
- */
- public function getValue()
- {
- return $this->value;
- }
- /**
- * Checks if this constant is defined in a namespace.
- *
- * @return bool
- */
- public function inNamespace()
- {
- return \strpos($this->name, '\\') !== false;
- }
- /**
- * To string.
- *
- * @return string
- */
- public function __toString()
- {
- return $this->getName();
- }
- /**
- * Gets the constant's file name.
- *
- * Currently returns null, because if it returns a file name the signature
- * formatter will barf.
- */
- public function getFileName()
- {
- return;
- // return $this->class->getFileName();
- }
- /**
- * Get the code start line.
- *
- * @throws \RuntimeException
- */
- public function getStartLine()
- {
- throw new \RuntimeException('Not yet implemented because it\'s unclear what I should do here :)');
- }
- /**
- * Get the code end line.
- *
- * @throws \RuntimeException
- */
- public function getEndLine()
- {
- return $this->getStartLine();
- }
- }
|