/**
  * @param $variableName
  * @throws \InvalidArgumentException
  */
 public function __construct($variableName)
 {
     if (true === ReservedKeyword::isValid($variableName)) {
         throw new \InvalidArgumentException(sprintf('Variable name can not contain reserved keyword : %s', $variableName));
     }
     if (false === (bool) preg_match('/^[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*$/', $variableName)) {
         throw new \InvalidArgumentException($variableName . ' do not respect php standard name format');
     }
     $this->magicPrefix = 0 === strpos($variableName, '__');
     $this->variableName = $variableName;
     $this->splitedName = $this->splitName($variableName);
 }
 /**
  * @param string $className
  * @throws \InvalidArgumentException
  */
 public function __construct($className)
 {
     $splitedClassName = explode('\\', $className);
     $lastKey = count($splitedClassName) - 1;
     $this->className = new PhpVariableName($splitedClassName[$lastKey]);
     unset($splitedClassName[$lastKey]);
     array_walk($splitedClassName, function ($val) use($className) {
         if (true === ReservedKeyword::isValid($val)) {
             throw new \InvalidArgumentException(sprintf('Namespace can not contain reserved keyword, %s find in %s', $val, $className));
         }
     });
     $this->namespace = $splitedClassName;
 }