Revision 148 | Blame | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed
<?php/** This file is part of Psy Shell.** (c) 2012-2023 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(string $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(string $name, bool $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(): bool{return false;}/*** Gets the constant name.*/public function getName(): string{return $this->name;}/*** Gets the namespace name.** Returns '' when the constant is not namespaced.*/public function getNamespaceName(): string{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.*/public function inNamespace(): bool{return \strpos($this->name, '\\') !== false;}/*** To string.*/public function __toString(): string{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();}}