Bonjour, j'ai une methode au sein d'une classe qui fait de l'autoloading(SplClassLoader). Il ya yne syntaxe que je n;arrive pas a cerner. Voici la methode:

  /**
   * Loads the given class or interface.
   *
   * @param string $className The name of the class to load.
   * @return void
   */
  public function loadClass($className)
  {
    if (null === $this->_namespace || $this->_namespace.$this->_namespaceSeparator === substr($className, 0, strlen($this->_namespace.$this->_namespaceSeparator))) {
      $fileName = '';
      $namespace = '';
      if (false !== ($lastNsPos = strripos($className, $this->_namespaceSeparator))) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName = str_replace($this->_namespaceSeparator, DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
      }
      $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . $this->_fileExtension;

      require ($this->_includePath !== null ? $this->_includePath . DIRECTORY_SEPARATOR : '') . $fileName;
    }
  }

la ligne que je ne comprends pas est la suivante:

 if (null === $this->_namespace || $this->_namespace.$this->_namespaceSeparator === substr($className, 0, strlen($this->_namespace.$this->_namespaceSeparator)))

En fait, ce que je comprends pas c'est cette syntaxe:

$this->_namespace.$this->_namespaceSeparator 

Je n'ai jamais vue qu'on appelle un attribut sur un autre alors que ce dernier n'est pas une reference a un objet..

2 réponses


intelligid
Réponse acceptée

Bonjour,
le point est un opérateur de concaténation. Donc,

$this->_namespace.$this->_namespaceSeparator 

Concatène $this->_namespace et $this->_namespaceSeparator

Ok, c'est fou... J n'y avais pas songé meme une seconde.. Merci