Пример #1
0
 /**
  * Creates accessor for instances of given class.
  * @param string $class
  * @return Accessor
  */
 public function create($class)
 {
     $name = $this->naming->deriveClassName($class);
     $namespaced = $this->naming->getNamespace() . '\\' . $name;
     if (class_exists($namespaced) || $this->cache && $this->cache->load($name)) {
         return new $namespaced();
     }
     $definition = $this->generator->generate($class);
     if ($this->cache) {
         $this->cache->save($name, $definition);
     }
     eval($definition);
     return new $namespaced();
 }
Пример #2
0
 /**
  * @param string $className
  * @return string
  */
 public function generate($className)
 {
     if (!class_exists($className)) {
         throw new InvalidArgumentException("Unknown class {$className}. Check for typos in class name and make sure" . " that given class is properly loaded.");
     }
     $origin = new ReflectionClass($className);
     $interface = ClassType::from(self::ACCESSOR_INTERFACE);
     $namespace = new PhpNamespace($this->naming->getNamespace());
     $class = $namespace->addClass($this->naming->deriveClassName($className));
     $class->addDocument("This class was automatically generated by Markatom/Accessor library.");
     $class->addImplement(self::ACCESSOR_INTERFACE);
     $class->addConst('TARGET', $origin->getName());
     $class->addProperty('writer')->setVisibility('private');
     $class->setMethods($interface->getMethods());
     $class->getMethod('read')->setVisibility('public')->setBody($this->generateReadBody($origin));
     $class->getMethod('write')->setVisibility('public')->setBody($this->generateWriteBody($origin));
     return (string) $namespace;
 }