$workingDayDeterminers */ public function __construct( protected readonly array $workingDayDeterminers, ) { } public function isWorkingDay(\DateTimeImmutable $date): bool { foreach ($this->workingDayDeterminers as $workingDayDeterminer) { if (!$workingDayDeterminer->isWorkingDay($date)) { return false; } } return true; // All working day determiners returned true, so the date is a working day. } public function getWorkingDaysCount(\DateTimeImmutable $startDate, int $workingDays): int { $workingDaysCount = $workingDays; foreach ($this->workingDayDeterminers as $workingDayDeterminer) { $workingDaysCount = min($workingDaysCount, $workingDayDeterminer->getWorkingDaysCount($startDate, $workingDays)); } return $workingDaysCount; } }