diff --git a/src/Path.php b/src/Path.php index fd3d279..a9fbb46 100644 --- a/src/Path.php +++ b/src/Path.php @@ -23,7 +23,15 @@ class Path if (isset($this->url['path'])) { $path = $this->url['path']; // $path = preg_replace('/\/{2,}/', '/', $path); - $this->path = self::optimize($this->fromString($path)); + $list = self::listFromString($path); + + if (isset($this->url['scheme']) && !isset($this->url['host'])) { + $this->absolute = false; + } else if ($list[0] == '' && count($list) > 1) { + $this->absolute = true; + } + + $this->path = self::optimize($list); } } @@ -118,16 +126,11 @@ class Path * * @return array */ - private function fromString ($path) + public static function listFromString ($path) { assert(is_string($path)); $list = preg_split('#\\\\|/#s', $path); - if (isset($this->url['scheme']) && !isset($this->url['host'])) { - $this->absolute = false; - } else if ($list[0] == '' && count($list) > 1) { - $this->absolute = true; - } return $list; } @@ -269,14 +272,12 @@ class Path return self::join($base, $path); } - /** - * Обьединяет строки в путь соединяя необходимым разделителем + * Обьединяет строки в Path соединяя необходимым разделителем * fixme не обрабатывает параметры урла, решение Path::join(SITE_WWW_PATH) . '?param=pampam' * @return string */ - static function join($_rest) - { + static function fromJoin($_rest) { $args = func_get_args(); $result = array(); $parts0 = new Path(array_shift($args)); @@ -288,7 +289,19 @@ class Path // При обьединении ссылок можно обьеденить path, query, fragment $path = implode(self::SEPARATOR, call_user_func_array('array_merge', $result)); $parts0->url['path'] = ($parts0->isAbsolute()) ? '/' . $path : $path; - return self::makeUrl($parts0->url); + return $parts0; + } + + /** + * Обьединяет строки в строку пути соединяя необходимым разделителем + * fixme не обрабатывает параметры урла, решение Path::join(SITE_WWW_PATH) . '?param=pampam' + * @return string + */ + static function join($_rest) + { + $args = func_get_args(); + $path = call_user_func_array("self::fromJoin", $args); + return self::makeUrl($path->url); } // Проверка структуры имени файла @@ -441,7 +454,7 @@ class Path */ static function updateRelativePathOnFileMove($relativePath, $srcFile, $dstFile) { $srcToDst = self::relative($srcFile, $dstFile); - return self::join($srcToDst, $relativePath); + return self::normalize(self::join($srcToDst, $relativePath)); } /**