/** * @param Point $lowerLeft * @param Point $upperRight * @param ValueProvider|callable $valueProvider */ public function __construct(Point $lowerLeft, Point $upperRight, $valueProvider = null) { parent::__construct($valueProvider); if ($lowerLeft->isRight($upperRight) || $lowerLeft->isAbove($upperRight)) { throw new \InvalidArgumentException('First point must not be right or above of the second point'); } $this->lowerLeft = $lowerLeft; $this->upperRight = $upperRight; }