char2Camelcase() 공개 정적인 메소드

public static char2Camelcase ( $value, $char = '_' )
예제 #1
0
파일: Model.php 프로젝트: jarves/jarves
 /**
  * @param \DOMNode $element
  * @return array imported properties
  */
 public function importNode(\DOMNode $element)
 {
     $reflection = new \ReflectionClass($this);
     $imported = [];
     /** @var \DOMNode $child */
     foreach ($element->childNodes as $child) {
         $nodeName = $child->nodeName;
         $value = $child->nodeValue;
         if ('#comment' === $nodeName) {
             continue;
         }
         if ('#text' === $nodeName) {
             if (null == $this->nodeValueVar) {
                 continue;
             } else {
                 $nodeName = $this->nodeValueVar;
             }
         }
         $elementToArrayProperty = isset($this->elementToArray[$nodeName]) ? $this->elementToArray[$nodeName] : null;
         $propertyName = $elementToArrayProperty ?: $nodeName;
         $propertyName = Tools::char2Camelcase($propertyName, '-');
         $setter = 'set' . ucfirst($propertyName);
         $getter = 'get' . ucfirst($propertyName);
         $setterValue = $value;
         $namespace = $this->getNamespacePath();
         if (method_exists($this, $setter)) {
             $reflectionMethod = $reflection->getMethod($setter);
             $parameters = $reflectionMethod->getParameters();
             $phpDocs = $this->getMethodMetaData($reflectionMethod);
             if (1 <= count($parameters)) {
                 $firstParameter = $parameters[0];
                 if ($firstParameter->getClass() && ($className = $firstParameter->getClass()->name)) {
                     $setterValue = new $className($child, $this->getJarves());
                 }
                 $result = str_replace(array('[', ']'), '', $phpDocs['param']['type']);
                 $types = explode('|', $result);
                 $clazz = '';
                 if (1 === count($types)) {
                     $returnType = $types[0];
                     if (!class_exists($clazz = $namespace . $returnType)) {
                         if (!class_exists($clazz = $returnType)) {
                             if (!'string' == ($clazz = $returnType)) {
                                 $clazz = null;
                             }
                         }
                     }
                 }
                 $noClazz = !$clazz;
                 if ($firstParameter->isArray()) {
                     if ($elementToArrayProperty) {
                         //for elements without plural parent: <route><req><req></route>
                         $setterValue = $this->{$getter}() ?: [];
                         if ($noClazz) {
                             $clazz = $namespace . ucfirst($nodeName);
                         }
                         if (class_exists($clazz)) {
                             $obj = new $clazz($child, $this->getJarves());
                             $setterValue[] = $obj;
                         } else {
                             if ($key = $child->attributes->getNamedItem('key')) {
                                 $setterValue[$key->nodeValue] = $value;
                             } else {
                                 $setterValue[] = $value;
                             }
                         }
                     } else {
                         $setterValue = array();
                         //for elements with plural parent: <route><reqs><req><req></reqs></route>
                         foreach ($child->childNodes as $subChild) {
                             if ('#' !== substr($subChild->nodeName, 0, 1)) {
                                 if ($noClazz) {
                                     $clazz = $namespace . ucfirst($subChild->nodeName);
                                 }
                                 if (class_exists($clazz)) {
                                     $object = new $clazz($subChild, $this->getJarves());
                                     $setterValue[] = $object;
                                 } else {
                                     if ($key = $subChild->attributes->getNamedItem('key')) {
                                         $setterValue[$key->nodeValue] = $subChild->nodeValue;
                                     } else {
                                         $setterValue[] = $subChild->nodeValue;
                                     }
                                 }
                             }
                         }
                     }
                 } else {
                     if (class_exists($clazz)) {
                         $setterValue = new $clazz($child, $this->getJarves());
                     }
                 }
             }
         }
         if (is_callable(array($this, $setter))) {
             $this->{$setter}($setterValue);
         } else {
             if (!isset($this->{$nodeName})) {
                 $this->extractExtraNodes($child, $this->additionalNodes);
             }
         }
         $imported[] = $propertyName;
     }
     foreach ($element->attributes as $attribute) {
         $nodeName = $attribute->nodeName;
         $value = $attribute->nodeValue;
         $nodeName = lcfirst(Tools::char2Camelcase($nodeName, '-'));
         $setter = 'set' . ucfirst($nodeName);
         if (is_callable(array($this, $setter))) {
             $this->{$setter}($value);
         } else {
             $this->additionalAttributes[$nodeName] = $value;
         }
         $imported[] = $nodeName;
     }
     return $imported;
 }