示例#1
0
 /**
  * @return callable
  */
 public function getCallable()
 {
     if ($i = strpos($this->callable_string, '::')) {
         $class_name = substr($this->callable_string, 0, $i);
         switch ($class_name) {
             case '$this':
                 $class_name = $this->context;
                 break;
             case 'self':
                 $class_name = get_class($this->context);
                 break;
             default:
                 $class_name = Namespaces::defaultFullClassName($class_name, get_class($this->context));
         }
         $method_name = substr($this->callable_string, $i + 2);
     } else {
         $class_name = get_class($this->context);
         $method_name = $this->callable_string;
         if (!(new Reflection_Method($class_name, $method_name))->isStatic()) {
             $class_name = $this->context;
         }
     }
     return [$class_name, $method_name];
 }
示例#2
0
 /**
  * @param $class_name string
  * @return string
  */
 protected function parseClassName($class_name)
 {
     if (!strpos($class_name, BS)) {
         if (isset($this->use[$class_name])) {
             return $this->use[$class_name];
         } else {
             return Namespaces::defaultFullClassName($class_name, get_class($this->getRootObject()));
         }
     }
     return $class_name;
 }
示例#3
0
文件: Joins.php 项目: TuxBoy/Demo-saf
 /**
  * @param $join                 Join
  * @param $master_path          string
  * @param $master_property_name string
  * @param $foreign_path         string
  * @return string the foreign class name
  * @todo use @storage to get correct master and foreign columns name
  */
 private function addReverseJoin(Join $join, $master_path, $master_property_name, $foreign_path)
 {
     list($foreign_class_name, $foreign_property_name) = explode('->', $master_property_name);
     $foreign_class_name = Namespaces::defaultFullClassName($foreign_class_name, $this->classes[$master_path]);
     if (strpos($foreign_property_name, '=')) {
         list($foreign_property_name, $master_property_name) = explode('=', $foreign_property_name);
         $join->master_column = 'id_' . $master_property_name;
     } else {
         $join->master_column = 'id';
     }
     $join->foreign_column = 'id_' . $foreign_property_name;
     $join->mode = Join::LEFT;
     $foreign_property = new Reflection_Property($foreign_class_name, $foreign_property_name);
     if ($foreign_property->getType()->isMultiple()) {
         $this->addLinkedJoin($join, $master_path, $foreign_path, $foreign_class_name, $foreign_property, true);
     }
     return $foreign_class_name;
 }
示例#4
0
 /**
  * @param $link
  * @param $class_name
  * @return Table[]
  */
 private function buildLinkTables($link, $class_name)
 {
     $link_class_name = Namespaces::defaultFullClassName($link, $class_name);
     $tables = (new Table_Builder_Class())->build($link_class_name);
     $this->excluded_properties = array_keys((new Reflection_Class($link_class_name))->getProperties([T_EXTENDS, T_USE]));
     return $tables;
 }
示例#5
0
 /**
  * @return string
  */
 public function getSetClassName()
 {
     $expr = '%' . '\\n\\s+\\*\\s+' . '@set' . '\\s+([\\\\\\w]+)' . '%';
     preg_match($expr, $this->getDocComment(), $match);
     return $match ? Namespaces::defaultFullClassName($match[1], $this->name) : Set::defaultSetClassNameOf($this->name);
 }
示例#6
0
文件: Names.php 项目: TuxBoy/Demo-saf
 /**
  * Changes 'A\Namespace\Class_Names' into 'A\Namespace\Class_Name'
  *
  * @param $class_name  string
  * @param $check_class boolean false if you don't want to check for existing classes
  * @return string
  */
 public static function setToClass($class_name, $check_class = true)
 {
     $set_class_name = $class_name;
     $class_name = Namespaces::shortClassName($class_name);
     $right = '';
     do {
         $class_name = self::setToSingle($class_name);
         $full_class_name = Namespaces::defaultFullClassName($class_name . $right, $set_class_name);
         if (@class_exists($full_class_name) || trait_exists($full_class_name, false)) {
             return $full_class_name;
         }
         $i = strrpos($class_name, '_');
         if (strrpos($class_name, BS) > $i) {
             $i = false;
         }
         if ($i === false) {
             if ((@class_exists($set_class_name) || trait_exists($set_class_name, false)) && (new Reflection_Class($set_class_name))->getAnnotation('set')->value == $set_class_name) {
                 return $set_class_name;
             } elseif ($check_class && error_reporting()) {
                 trigger_error('No class found for set ' . $set_class_name, E_USER_ERROR);
             } else {
                 $right = substr($class_name, $i) . $right;
                 $class_name = substr($class_name, 0, $i);
             }
         } else {
             $right = substr($class_name, $i) . $right;
             $class_name = substr($class_name, 0, $i);
         }
     } while (!empty($class_name));
     $class_name .= $right;
     if (class_exists($class_name, false) || trait_exists($class_name, false)) {
         return $class_name;
     } elseif (strrpos($set_class_name, '_') > strrpos($set_class_name, BS)) {
         $namespace = Namespaces::of($set_class_name);
         $class_name = substr($set_class_name, strpos($set_class_name, '_', strlen($namespace)) + 1);
         return self::setToClass($namespace . BS . $class_name, $check_class);
     } else {
         return $set_class_name;
     }
 }