haijin/tools

PHP应用程序中常用的工具。

此包的规范存储库似乎已不存在,因此包已被冻结。

v2.0.0 2019-04-28 02:00 UTC

This package is auto-updated.

Last update: 2022-12-28 20:16:06 UTC


README

PHP应用程序中常用的工具。

Latest Stable Version Build Status License

版本 2.0.0

如果您非常喜欢它,您可以通过资助其开发来做出贡献。

目录

  1. 安装
  2. 可用工具
    1. AttributePath
    2. FilePath
    3. 对象访问器
    4. OrderedCollection
    5. 字典
    6. FilesCache
    7. 调试器
  3. 运行测试

安装

将此库包含在您的项目 composer.json 文件中

{
    ...

    "require": {
        ...
        "haijin/tools": "^2.0",
        ...
    },

    ...
}

可用工具

AttributePath

AttributePath是从根对象到该对象嵌套属性的一系列属性。

$path = new AttributePath("user.address");
$path = $path->concat("street");

print $path->toString(); // "user.address.street"
print $path->toArray(); // ["user", "address", "street" ]

$user = [
    "name" => "Lisa",
    "lastName" => "Simpson",
    "address" => [
        "street" => null
    ]
];

$path->setValueTo($user, "Evergreen 742");
print $path->getValueFrom($user); // Evergreen 742

$path = $path->back();
print $path; // "user.address"

FilePath

文件或目录的路径。

$path = new FilePath("home/dev");
$path = $path->concat("src");

print $path->toString(); // "home/dev/src"
print $path->toArray(); // ["home", "dev", "src"]

$path = $path->back();
print $path; // "home/dev"

对象访问器

一个类,用于使用多态接口动态读取和写入对象、数组和关联数组的属性。

$user = [
    'name' => 'Lisa',
    'lastName' => 'Simpson',
    'addresses' => [
        [
            'street' => null
        ]
    ]
];

$accessor = new ObjectAttributeAccessor($user);
$accessor->setValueAt("addresses.[0].street", "Evergreen 742");
print $accessor->getValueAt("addresses.[0].street"); // Evergreen 742

OrderedCollection

PHP 数组的替代品,用于索引集合。

它总是通过引用传递,并具有一致、简单和完整的协议。

$orderedCollection = OrderedCollection::withAll([10, 20, 30]);
$orderedCollection[] = 40;

print $orderedCollection[0]; // => 10
print $orderedCollection[-1]; // => 40

print $orderedCollection->findFirst(function($sum, $each) {
    return $each > 20;
}); // 30

print $orderedCollection->select(function($each) {
    return $each > 20;
}); // [30, 40]

print $orderedCollection->collect(function($each) {
    return $each + 1;
}); // [11, 21, 31, 41]


print $orderedCollection->acummulate(0, function($sum, $each) {
    return $sum = $sum + $each;
}); // 100

$orderedCollection->eachDo(function($each) {
    print $each . " ";
}); // 10, 20, 30, 40 

print $orderedCollection->removeAt(0); // 10

字典

PHP 数组的替代品,用于关联集合。

它总是通过引用传递,并具有一致、简单和完整的协议。

$dictionary = new Dictionary();
$dictionary['a'] = 10;
$dictionary['b'] = 20;

print $dictionary->getKeys(); // => ['a', 'b']
print $dictionary->getValues(); // => [10, 20]

print $dictionary['a']; // => 10

print $dictionary->atIfAbsent('c', function() {
    return 0;
}); // 0

print $dictionary->atIfAbsent('c', 0); // 0

$dictionary->keysAndValuesDo(function($key, $value) {
    print $key . " => " . $value . ", ";
}); // 'a' => 10, 'b' => 20,  

print $dictionary->removeAt('a'); // 10

FilesCache

一个非常简单的文件缓存目录。

使用它来缓存缓存的文件生成的内容的示例

use Haijin\FilesCache;

$cache = new FilesCache()

$cache->setCacheFolder("resources/css");

$cache->lockingDo(function($cache) use($sassFilename) {

    if($cache->needsCaching($sassFilename)) {

        $cssContents = $this->sassToCss(file_get_contents($sassFilename));

        $cache->writeFileContents(
            $sassFilename,
            $cssContents,
            $filename . ".css"
        );

    }

    return $this->cache->getPathOf($sassFilename);

});

使用它来从资源目录缓存文件到公共目录的示例

use Haijin\FilesCache;

$cache = new FilesCache()

$cache->setCacheFolder("public/css");

$cache->lockingDo(function($cache) use($filename) {

    if ($cache->needsCaching($filename)) {

        $cache->writeFile(
            $filename,
            $filename
        );

    }

    return $this->cache->getPathOf($filename);

});

调试器

使用 \Haijin\Debugger 递归检查任何值、数组或对象。

Screenshot

用于控制台和文件记录

echo \Haijin\Debugger::inspect($object);

用于 HTML 记录

echo \Haijin\Debugger::webInspect($object);

在文件 tests\specsBoot.php 中定义函数,并在规范中使用

function inspect($object)
{
    \Haijin\Debugger::inspect($object);
}

\inspect($filesCache);

运行测试

composer specs

或者,如果您想使用 PHP 7.2 的 Docker 运行测试

sudo docker run -ti -v $(pwd):/home/php-tools --rm --name php-tools haijin/php-dev:7.2 bash
cd /home/php-tools/
composer install
composer specs