/** * @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]; }
/** * @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; }
/** * @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; }
/** * @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; }
/** * @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); }
/** * 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; } }