ama-team / pathetic
一个帮助处理路径的小型库
Requires
- php: >= 5.4
Requires (Dev)
- allure-framework/allure-codeception: ^1.2
- codeception/codeception: ^2.3
- satooshi/php-coveralls: ^1.0
- symfony/console: <= 3.2.8
This package is not auto-updated.
Last update: 2024-09-25 02:24:24 UTC
README
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 有两种类型的绝对路径 - 带有和没有驱动器字母的(例如 \Users
和 C:\Users
)。这两种类型都被 Pathetic 视为绝对路径 - 这取决于最终用户是否需要指定驱动器字母,或者是否从当前工作目录继承它。这当然是一个缺点,但除非绝对路径是从用户输入继承的(这应该是一个有意为之的行为),否则这种情况不会发生。