texdc / range
A library of range objects
v2.0.1
2018-02-27 04:25 UTC
Requires
- php: ~7.0
Requires (Dev)
- phpunit/phpunit: @stable
- satooshi/php-coveralls: @stable
- squizlabs/php_codesniffer: @stable
This package is not auto-updated.
Last update: 2024-10-26 17:13:33 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
The inspiration for this library came from a discussion by Martin Fowler.
install
composer require texdc/range @stable
examples
Range
Ranges provide simple validation and iteration.
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'); }
Ranges can also be compared against each other.
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])));
See the tests for more comparisons!
Enablement
Enablements leverage a range for more robust alternatives to simple boolean flags.
use texdc\range\DateEnablement; class DatedBannerAd extends AbstractBannerAd { /** * @var DateEnablement */ private $enablement; // ... public function render() { if ($this->enablement->isEnabled()) { return parent::render(); } } }