From eb847fbfb289dc3fae5798249c6165f699a746ea Mon Sep 17 00:00:00 2001 From: vuurball Date: Wed, 12 Apr 2017 18:01:43 +0300 Subject: [PATCH] Specification pattern - performance optimization --- Behavioral/Specification/AndSpecification.php | 11 +++++++---- Behavioral/Specification/OrSpecification.php | 12 +++++++----- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Behavioral/Specification/AndSpecification.php b/Behavioral/Specification/AndSpecification.php index c6a88ea..5a7d99c 100644 --- a/Behavioral/Specification/AndSpecification.php +++ b/Behavioral/Specification/AndSpecification.php @@ -17,14 +17,17 @@ class AndSpecification implements SpecificationInterface $this->specifications = $specifications; } + /** + * if at least one specification is false, return false, else return true. + */ public function isSatisfiedBy(Item $item): bool { - $satisfied = []; - foreach ($this->specifications as $specification) { - $satisfied[] = $specification->isSatisfiedBy($item); + if (!$specification->isSatisfiedBy($item)) { + return false; + } } - return !in_array(false, $satisfied); + return true; } } diff --git a/Behavioral/Specification/OrSpecification.php b/Behavioral/Specification/OrSpecification.php index 62a4e08..47faaaa 100644 --- a/Behavioral/Specification/OrSpecification.php +++ b/Behavioral/Specification/OrSpecification.php @@ -17,14 +17,16 @@ class OrSpecification implements SpecificationInterface $this->specifications = $specifications; } + /** + * if at least one specification is true, return true, else return false + */ public function isSatisfiedBy(Item $item): bool { - $satisfied = []; - foreach ($this->specifications as $specification) { - $satisfied[] = $specification->isSatisfiedBy($item); + if ($specification->isSatisfiedBy($item)) { + return true; + } } - - return in_array(true, $satisfied); + return false; } }