namespace Psy\Reflection;
/**
- * Somehow the standard reflection library doesn't include constants.
- *
- * ReflectionConstant corrects that omission.
+ * @deprecated ReflectionConstant is now ReflectionClassConstant. This class
+ * name will be reclaimed in the next stable release, to be used for
+ * ReflectionConstant_ :)
*/
-class ReflectionConstant implements \Reflector
+class ReflectionConstant extends ReflectionClassConstant
{
- private $class;
- private $name;
- private $value;
-
/**
- * Construct a ReflectionConstant object.
- *
- * @param mixed $class
- * @param string $name
+ * {inheritDoc}.
*/
public function __construct($class, $name)
{
- if (!$class instanceof \ReflectionClass) {
- $class = new \ReflectionClass($class);
- }
-
- $this->class = $class;
- $this->name = $name;
-
- $constants = $class->getConstants();
- if (!array_key_exists($name, $constants)) {
- throw new \InvalidArgumentException('Unknown constant: ' . $name);
- }
-
- $this->value = $constants[$name];
- }
-
- /**
- * Gets the declaring class.
- *
- * @return string
- */
- public function getDeclaringClass()
- {
- $parent = $this->class;
-
- // Since we don't have real reflection constants, we can't see where
- // it's actually defined. Let's check for a constant that is also
- // available on the parent class which has exactly the same value.
- //
- // While this isn't _technically_ correct, it's prolly close enough.
- do {
- $class = $parent;
- $parent = $class->getParentClass();
- } while ($parent && $parent->hasConstant($this->name) && $parent->getConstant($this->name) === $this->value);
-
- return $class;
- }
-
- /**
- * Gets the constant name.
- *
- * @return string
- */
- public function getName()
- {
- return $this->name;
- }
+ @\trigger_error('ReflectionConstant is now ReflectionClassConstant', E_USER_DEPRECATED);
- /**
- * Gets the value of the constant.
- *
- * @return mixed
- */
- public function getValue()
- {
- return $this->value;
- }
-
- /**
- * 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();
- }
-
- /**
- * Get the constant's docblock.
- *
- * @return false
- */
- public function getDocComment()
- {
- return false;
- }
-
- /**
- * Export the constant? I don't think this is possible.
- *
- * @throws \RuntimeException
- */
- public static function export()
- {
- throw new \RuntimeException('Not yet implemented because it\'s unclear what I should do here :)');
- }
-
- /**
- * To string.
- *
- * @return string
- */
- public function __toString()
- {
- return $this->getName();
+ parent::__construct($class, $name);
}
}