texdc/range

范围对象库

v2.0.1 2018-02-27 04:25 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:29:24 UTC


README

Oh, give me a home where the buffalo roam
Where the deer and the antelope play
Where seldom is heard a discouraging word
And the skies are not cloudy all day

-- Home on the Range

这个库的灵感来源于Martin Fowler的讨论。

Software License Build Status Coverage Status

安装

Composer:

composer require texdc/range @stable

示例

范围

范围提供简单的验证和迭代。

use texdc\range\DateRange;

$dateRange = new DateRange(new DateTime, new DateTime('+1 month'));

assert($dateRange->includes(new DateTime('+3 days')));

echo $dateRange->getSpan()->days;

foreach ($dateRange as $day) {
    echo $day->format('l, F jS, Y');
}

范围也可以相互比较。

use texdc\range\IntegerRange;

$range1 = new IntegerRange(1, 5);
$range2 = new IntegerRange(8, 3);
$range3 = new IntegerRange(5, 8);

assert($range1->overlaps($range2));
assert($range2->isContraryTo($range1));
assert($range3->abuts($range2));
assert($range1->begins(IntegerRange::merge($range1, $range3)));
assert($range3->ends(IntegerRange::combine([$range1, $range3])));

查看测试以获取更多比较!

启用

启用功能利用范围来提供比简单布尔标志更健壮的替代方案。

use texdc\range\DateEnablement;

class DatedBannerAd extends AbstractBannerAd
{
    /**
     * @var DateEnablement
     */
    private $enablement;
    
    // ...
    
    public function render()
    {
        if ($this->enablement->isEnabled()) {
            return parent::render();
        }
    }
}