public function testCreatingContextWithSelf() { $reflector = new ClassReflector(new StringSourceLocator('<?php class Foo {}')); $self = $reflector->reflect('Foo'); $context = new CompilerContext($reflector, $self); $this->assertTrue($context->hasSelf()); $this->assertSame($reflector, $context->getReflector()); $this->assertSame($self, $context->getSelf()); }
/** * Compile class constants * * @param Node\Expr\ClassConstFetch $node * @param CompilerContext $context * @return string */ private function compileClassConstFetch(Node\Expr\ClassConstFetch $node, CompilerContext $context) { $className = implode('\\', $node->class->parts); if ($node->name === 'class') { return substr((string) (new ResolveTypes())->__invoke([$className], (new ContextFactory())->createForNamespace($context->getSelf()->getNamespaceName(), $context->getSelf()->getLocatedSource()->getSource()))[0]->getFqsen(), 1); } $classInfo = null; if ('self' === $className || 'static' === $className) { $classInfo = $context->getSelf(); } if (null === $classInfo) { $classInfo = $context->getReflector()->reflect($className); } /* @var ReflectionClass $classInfo */ $constName = $node->name; return $classInfo->getConstant($constName); }
/** * Compile class constants * * @param Node\Expr\ClassConstFetch $node * @param CompilerContext $context * @return string */ private function compileClassConstFetch(Node\Expr\ClassConstFetch $node, CompilerContext $context) { $className = implode('\\', $node->class->parts); $classInfo = null; if ('self' === $className || 'static' === $className) { $classInfo = $context->getSelf(); } if (null === $classInfo) { $classInfo = $context->getReflector()->reflect($className); } /* @var ReflectionClass $classInfo */ $constName = $node->name; return $classInfo->getConstant($constName); }