ama-team/pathetic

一个帮助处理路径的小型库

0.1.1 2017-05-31 13:24 UTC

This package is not auto-updated.

Last update: 2024-09-25 02:24:24 UTC


README

Packagist AppVeyor/Master CircleCI/Master Scrutinizer/Master Coveralls/Master

Pathetic 是一个简单的 PHP 库,仅包含几个类。它的目的是帮助进行平台无关的路径工作,这样你就可以运行相同的代码,fnmatch 检查和比较,无论你的项目运行在什么特定的机器上。

是的,它受到了 java.nio.Path 的影响。

安装

composer require ama-team/pathetic

用法

你从经典的字符串和 Path::parse 方法开始

use AmaTeam\Pathetic\Path;

$path = Path::parse('beverages/soda');
$path = Path::parse('file://beverages/soda');
$path = Path::parse('c:\\beverages\\soda', Path::PLATFORM_WINDOWS);
$path = Path::parse('c:/beverages/soda', Path::PLATFORM_WINDOWS);
$path = Path::parse('custom-scheme://c:/beverages/soda', Path::PLATFORM_WINDOWS);

第二个参数仅在操作特定平台的路径时使用 - 默认情况下,它是自动计算的。

在你获得路径实例后,你可以简单地将它转换为字符串以获得一致的分隔符表示形式

$path = Path::parse('file://beverages\\soda');
echo (string) $path; // file://beverages/soda

这将避免你在将 directory/file 添加到 Windows 路径后,再尝试与从操作系统(其中将包含 directory\file)收到的路径进行比较时的尴尬时刻,这还使得使用 fnmatch glob 模式进行平台无关的使用变得非常容易。

如果你需要平台一致的表现,可以使用 toPlatformString() 方法

echo $path->toPlatformString(); // file://beverages\\soda

除了这些基本操作,Pathetic 还允许基本路径规范化、路径连接(解析)、路径相对化和路径比较。

$path = Path::parse('/node/directory//./../leaf');
echo (string) $path; # /node/directory//./../leaf
echo $path->normalize(); # /node/leaf
$path->isAbsolute(); # true

$node = Path::parse('/node');
$leaf = Path::parse('leaf');
$other = $node->resolve($leaf); # /node/leaf
$path->isChildOf($node); # true
$path->isSiblingOf($other); # true
$path->equals($other); # true
echo (string) $path->getParent(); # /node
echo (string) $node->relativize($path); # leaf
foreach ($path->iterator() as $entry) {
    echo (string) $entry;
    # /
    # /node
    # /node/leaf
}

最后,还有一些你可能想使用的辅助方法

$path = Path::parse('file://c:/node/directory', Path::PLATFORM_WINDOWS);
$path = $path->withoutScheme()->withRoot('d:');
echo $path->getRoot(); # d:
echo $path->getScheme(); # null
echo $path->getSeparator(); # \ - because of windows platform

重要注意事项

所有路径操作都是非破坏性的,并且所有路径实例都是不可变的 - 无论何时调用 #normalize()#relativize()#withRoot(),都会创建新的对象而不是修改旧的对象。

存在一个边缘情况,即当前目录 - 虽然人们可能会期望当前目录的正常化相对路径将渲染为点('.'),但这不会发生 - 它将被渲染为空字符串('')。然而,在你不调用规范化的情况下,你的路径将保持原样。

Windows 有两种类型的绝对路径 - 带有和没有驱动器字母的(例如 \UsersC:\Users)。这两种类型都被 Pathetic 视为绝对路径 - 这取决于最终用户是否需要指定驱动器字母,或者是否从当前工作目录继承它。这当然是一个缺点,但除非绝对路径是从用户输入继承的(这应该是一个有意为之的行为),否则这种情况不会发生。

开发分支盾牌地下室

AppVeyor/Dev CircleCI/Dev Scrutinizer/Dev Coveralls/Dev