/**
* Performs a logical conjunction of the two given constraints. The method
* takes one or more contraints and concatenates them with a boolean AND.
* It also accepts a single array of constraints to be concatenated.
*
* @param mixed $constraint1 The first of multiple constraints or an array of constraints.
* @return Qom\LogicalAnd
* @throws InvalidNumberOfConstraintsException
* @api
*/
public function logicalAnd($constraint1)
{
if (is_array($constraint1)) {
$resultingConstraint = array_shift($constraint1);
$constraints = $constraint1;
} else {
$constraints = func_get_args();
$resultingConstraint = array_shift($constraints);
}
if ($resultingConstraint === null) {
throw new InvalidNumberOfConstraintsException('There must be at least one constraint or a non-empty array of constraints given.', 1268056288);
}
foreach ($constraints as $constraint) {
$resultingConstraint = $this->qomFactory->_and($resultingConstraint, $constraint);
}
return $resultingConstraint;
}