function DocParser::Constant

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Component/Annotation/Doctrine/DocParser.php \Drupal\Component\Annotation\Doctrine\DocParser::Constant()
  2. 8.9.x core/lib/Drupal/Component/Annotation/Doctrine/DocParser.php \Drupal\Component\Annotation\Doctrine\DocParser::Constant()
  3. 10 core/lib/Drupal/Component/Annotation/Doctrine/DocParser.php \Drupal\Component\Annotation\Doctrine\DocParser::Constant()

Constant ::= integer | string | float | boolean

Return value

mixed

Throws

AnnotationException

2 calls to DocParser::Constant()
DocParser::ArrayEntry in core/lib/Drupal/Component/Annotation/Doctrine/DocParser.php
ArrayEntry ::= Value | KeyValuePair KeyValuePair ::= Key ("=" | ":") PlainValue | Constant Key ::= string | integer | Constant
DocParser::PlainValue in core/lib/Drupal/Component/Annotation/Doctrine/DocParser.php
PlainValue ::= integer | string | float | boolean | Array | Annotation

File

core/lib/Drupal/Component/Annotation/Doctrine/DocParser.php, line 895

Class

DocParser
A parser for docblock annotations.

Namespace

Drupal\Component\Annotation\Doctrine

Code

private function Constant() {
    $identifier = $this->Identifier();
    if (!defined($identifier) && str_contains($identifier, '::') && '\\' !== $identifier[0]) {
        [
            $className,
            $const,
        ] = explode('::', $identifier);
        $alias = false === ($pos = strpos($className, '\\')) ? $className : substr($className, 0, $pos);
        $found = false;
        switch (true) {
            case !empty($this->namespaces):
                foreach ($this->namespaces as $ns) {
                    if (class_exists($ns . '\\' . $className) || interface_exists($ns . '\\' . $className)) {
                        $className = $ns . '\\' . $className;
                        $found = true;
                        break;
                    }
                }
                break;
            case isset($this->imports[$loweredAlias = strtolower($alias)]):
                $found = true;
                $className = false !== $pos ? $this->imports[$loweredAlias] . substr($className, $pos) : $this->imports[$loweredAlias];
                break;
            default:
                if (isset($this->imports['__NAMESPACE__'])) {
                    $ns = $this->imports['__NAMESPACE__'];
                    if (class_exists($ns . '\\' . $className) || interface_exists($ns . '\\' . $className)) {
                        $className = $ns . '\\' . $className;
                        $found = true;
                    }
                }
                break;
        }
        if ($found) {
            $identifier = $className . '::' . $const;
        }
    }
    
    /**
     * Checks if identifier ends with ::class and remove the leading backslash if it exists.
     */
    if ($this->identifierEndsWithClassConstant($identifier) && !$this->identifierStartsWithBackslash($identifier)) {
        return substr($identifier, 0, $this->getClassConstantPositionInIdentifier($identifier));
    }
    if ($this->identifierEndsWithClassConstant($identifier) && $this->identifierStartsWithBackslash($identifier)) {
        return substr($identifier, 1, $this->getClassConstantPositionInIdentifier($identifier) - 1);
    }
    if (!defined($identifier)) {
        throw AnnotationException::semanticalErrorConstants($identifier, $this->context);
    }
    return constant($identifier);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.