gowork/values

PHP 原始类型值对象。


README

Values 是一个库,可以将 PHP 的原始类型包装成干净、不可变且用户友好的对象。

Build Status License Latest Stable Version Maintainability

安装

它适用于 PHP >=8.0。此库在 Composer/Packagist 上以 gowork/values 的形式提供。要安装它,请执行

composer require gowork/values ^0.6

或者手动更新您的 composer.json,如下所示

{
    (...)
    "require": {
        "gowork/values": "^0.6"
    }
    (...)
}

之后运行 composer installcomposer update。如果您不使用 Composer,请从 GitHub 下载源代码,并按需加载。然而,强烈建议使用 Composer。

用法

目前可用的实现包括

ArrayValue

PHP 原生索引数组的对象等价物。它实现了大多数 array_* 函数作为对象方法。

示例

<?php

use GW\Value\Wrap;

$arrayValue = Wrap::array(['a', 'b', 'c', 'a', 'd', 'f'])
    ->map(function (string $value): string {
        return strtoupper($value)
    })
    ->map('strtolower')
    ->filter(function (string $value): bool {
        return $value !== 'd';
    })
    ->sort(function (string $a, string $b): int {
        return $a <=> $b;
    })
    ->shuffle()
    ->reverse()
    ->unique()
    ->diff(Wrap::array(['d', 'f']))
    ->intersect(Wrap::array(['a', 'b', 'c']))
    ->join(Wrap::array(['g', 'h', 'i']))
    ->unshift('j')
    ->shift($j)
    ->push('l')
    ->pop($l)
    ->slice(0, 6)
    ->each(function (string $value): void {
        echo $value;
    });

$count = $arrayValue->count();

$reduced = $arrayValue->reduce(
    function (string $reduced, string $value): string {
        return $reduced . $value;
    },
    ''
);

$stringValue = $arrayValue->implode(', ');

if (isset($arrayValue[0])) {
    $first = $arrayValue[0];
}

$first = $arrayValue->first();

foreach ($arrayValue as $item) {
    echo $item;
}

AssocValue

PHP 原生关联数组的对象等价物。它具有与 ArrayValue 相同的所有方法,只有少数细微差异和一些新增功能。

<?php

use \GW\Value\Wrap;

$assocValue = Wrap::assocArray(['a' => 1, 'b' => 2, 'c' => 3, 'x' => 0])
    ->with('d', 4)
    ->without('a', 'b')
    ->withoutElement(0)
    ->merge(Wrap::assocArray(['e' => 5, 'f' => 6]));

$keys = $assocValue->keys();

$withMappedKeys = $assocValue->mapKeys(function (string $key): string {
    return strtoupper($key);
});

$aValue = $assocValue->get('a', $default = 1);
$hasA = $assocValue->has('a');

$associativeArray = $assocValue->toAssocArray();
$indexedArray = $assocValue->toArray();

StringValue

PHP 原始字符串的对象等价物。它实现了大多数 str*/mb_str* 函数作为对象方法。

<?php

use GW\Value\Wrap;

$stringValue = Wrap::string('just example string')
    ->trim()
    ->trimRight()
    ->trimLeft()
    ->lower()
    ->upper()
    ->lowerFirst()
    ->upperFirst()
    ->upperWords()
    ->padLeft(50, '-')
    ->padRight(100, '-')
    ->padBoth(200, '-')
    ->replace('no', 'yes')
    ->replacePattern('/\s/', '-')
    ->replacePatternCallback('/[\-]+/', function (array $match): string {
        return '-';
    })
    ->truncate(140)
    ->substring(0, 100)
    ->stripTags();

$hasExample = $stringValue->contains('example');
$firstA = $stringValue->position('a');
$lastA = $stringValue->positionLast('a');
$stringLength = $stringValue->length();
$primitiveString = $stringValue->toString();
$onlyLetters = $stringValue->isMatching('/^[a-z]+$/');
$stringsArray = $stringValue->explode(' ');

StringsArray

包装字符串数组的对象。它具有与 ArrayValueStringValue 相同的所有方法。调用从 StringValue 继承的方法意味着与在 StringsArray 中包含的每个 StringValue 元素上调用此方法相同。

<?php

use \GW\Value\Wrap;
use \GW\Value\StringValue;

$stringsArray = Wrap::stringsArray(['one', '  two ', '<b>three</b>'])
    // StringValue
    ->trim()
    ->stripTags()
    ->padLeft(16)
    // ArrayValue
    ->unique()
    ->each(function (StringValue $value): void {
        echo $value->toString();
    });

IterableValue

包装可迭代的对象。

<?php

use \GW\Value\Wrap;

$range = function (int $start, int $end) {
    for ($i = $start; $i <= $end; $i++) {
        yield $i;
    }
};

$stringsArray = Wrap::iterable($range(0, 10))
    ->join(Wrap::iterable($range(400, 440000)))
    ->slice(10, 20)
    ->filter(function (int $value): bool {
        return $value % 2 === 0;
    })
    ->map(function (int $value): int {
        return $value + 2;
    })
    ->each(function (int $value): void {
        echo $value . "\n";
    });

文档

有关完整方法参考和更多示例,请参阅 此处

贡献

想贡献吗?太好了!提交一个问题或 Pull Request,并解释您想在 GW/Value 中看到什么。

许可

MIT 许可。请参阅此存储库主目录中的 LICENSE 文件。