evaluateVersionCompareCondition($condition); } if ($condition instanceof BinaryToVersionCompareCondition) { return $this->evaluateBinaryToVersionCompareCondition($condition); } return null; } /** * @return bool|int */ private function evaluateVersionCompareCondition(VersionCompareCondition $versionCompareCondition) { $compareSign = $versionCompareCondition->getCompareSign(); if ($compareSign !== null) { return version_compare( (string) $versionCompareCondition->getFirstVersion(), (string) $versionCompareCondition->getSecondVersion(), $compareSign ); } return version_compare( (string) $versionCompareCondition->getFirstVersion(), (string) $versionCompareCondition->getSecondVersion() ); } private function evaluateBinaryToVersionCompareCondition( BinaryToVersionCompareCondition $binaryToVersionCompareCondition ): bool { $versionCompareResult = $this->evaluateVersionCompareCondition( $binaryToVersionCompareCondition->getVersionCompareCondition() ); if ($binaryToVersionCompareCondition->getBinaryClass() === Identical::class) { return $binaryToVersionCompareCondition->getExpectedValue() === $versionCompareResult; } if ($binaryToVersionCompareCondition->getBinaryClass() === NotIdentical::class) { return $binaryToVersionCompareCondition->getExpectedValue() !== $versionCompareResult; } if ($binaryToVersionCompareCondition->getBinaryClass() === Equal::class) { // weak comparison on purpose return $binaryToVersionCompareCondition->getExpectedValue() === $versionCompareResult; } if ($binaryToVersionCompareCondition->getBinaryClass() === NotEqual::class) { // weak comparison on purpose return $binaryToVersionCompareCondition->getExpectedValue() !== $versionCompareResult; } throw new ShouldNotHappenException(); } }