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. 11.x 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.