private function compileClassConstFetch(Node\Expr\ClassConstFetch $node, CompilerContext $context)
    {
        /** @var Node\Identifier $node->name */
        $nodeName = $node->name->name;
        /** @var Node\Name $node->class */
        $className = $node->class->toString();

        if ($nodeName === 'class') {
            return $className;
        }

        /** @var ReflectionClass|null $classInfo */
        $classInfo = null;

        if ($className === 'self' || $className === 'static') {
            $classInfo = $this->getConstantDeclaringClass($nodeName, $context->getSelf());
        }

        if ($classInfo === null) {
            /** @var ReflectionClass $classInfo */
            $classInfo = $context->getReflector()->reflect($className);
        }

        $reflectionConstant = $classInfo->getReflectionConstant($nodeName);

        if (! $reflectionConstant instanceof ReflectionClassConstant) {
            throw Exception\UnableToCompileNode::becauseOfNotFoundClassConstantReference($context, $classInfo, $node);
        }

        return $this->__invoke(
            $reflectionConstant->getAst()->consts[$reflectionConstant->getPositionInAst()]->value,
            new CompilerContext($context->getReflector(), $classInfo)
        );
    }
private function compileClassConstFetch(Node\Expr\ClassConstFetch $node, CompilerContext $context)
    {
        /** @var Node\Identifier $node->name */
        $nodeName = $node->name->name;
        /** @var Node\Name $node->class */
        $className = $node->class->toString();

        if ($nodeName === 'class') {
            return $className;
        }

        /** @var ReflectionClass|null $classInfo */
        $classInfo = null;

        if ($className === 'self' || $className === 'static') {
            $classInfo = $this->getConstantDeclaringClass($nodeName, $context->getSelf());
        }

        if ($classInfo === null) {
            /** @var ReflectionClass $classInfo */
            $classInfo = $context->getReflector()->reflect($className);
        }

        $reflectionConstant = $classInfo->getReflectionConstant($nodeName);

        if (! $reflectionConstant instanceof ReflectionClassConstant) {
            throw Exception\UnableToCompileNode::becauseOfNotFoundClassConstantReference($context, $classInfo, $node);
        }

        return $this->__invoke(
            $reflectionConstant->getAst()->consts[$reflectionConstant->getPositionInAst()]->value,
            new CompilerContext($context->getReflector(), $classInfo)
        );
    }
private function compileClassConstFetch ( Node \ Expr \ ClassConstFetch $ node , CompilerContext $ context ) { /** @var Node\Identifier $node->name */ $ nodeName = $ node -> name -> name ; /** @var Node\Name $node->class */ $ className = $ node -> class -> toString ( ) ; if ( $ nodeName === 'class' ) { return $ className ; } /** @var ReflectionClass|null $classInfo */ $ classInfo = null ; if ( $ className === 'self' || $ className === 'static' ) { $ classInfo = $ this -> getConstantDeclaringClass ( $ nodeName , $ context -> getSelf ( ) ) ; } if ( $ classInfo === null ) { /** @var ReflectionClass $classInfo */ $ classInfo = $ context -> getReflector ( ) -> reflect ( $ className ) ; } $ reflectionConstant = $ classInfo -> getReflectionConstant ( $ nodeName ) ; if ( ! $ reflectionConstant instanceof ReflectionClassConstant ) { throw Exception \ UnableToCompileNode :: becauseOfNotFoundClassConstantReference ( $ context , $ classInfo , $ node ) ; } return $ this -> __invoke ( $ reflectionConstant -> getAst ( ) -> consts [ $ reflectionConstant -> getPositionInAst ( ) ] -> value , new CompilerContext ( $ context -> getReflector ( ) , $ classInfo ) ) ; }
Compile class constants

@return string|int|float|bool|mixed[]|null

@throws IdentifierNotFound
@throws Exception\UnableToCompileNode If a referenced constant could not be located on the expected referenced class.
Compile class constants