>>1731888 (OP)ОП, проверь Вектор - https://ideone.com/06qnUR сделал с антикризисными мерами.Пробовал создавать новые объекты vector через сlone, не получалось (данные были одинаковы во всех остальных после применения антикризисных мер), пришел к сериализации.
>>1770074 →> Пробовал создавать новые объекты vector через сlone, не получалось Если ты клонируешь объект, содержащий другие объекты (например, клонируешь Департамент, в котором есть Работники), то основной объект клонируется, а вложенные - нет, просто в объект-клон копируются ссылки на них. Надо использовать магический метод __clone и в нем вручную клонировать вложенные объекты. Антикризисные меры логичнее сделать в отдельном объекте ("антикризисный комитет"). Так как у каждого класса должна быть своя зона ответственности, а в твоем примере Департамент отвечает и за управление списком работников, и за антикризисные меры. Дальше добавится еще задача, ты ее снова засунешь в Департамент, и получится класс-монстр, который занимается всем на свете.> dismissEmployee(int $id)Неудачно сделан аргумент - id - откуда мы его должны брать, он ведь не прописан в Работнике? Логичнее было бы сюда передавать объект-работника и пусть класс сам разбирается, как его найти.Увольнение инженеров лучше было бы сделать так: - выбрать всех инженеров (метод в департаменте)- отсортировать по рангу (usort)- отрезать первые 40% (array_slice)- уволить по получившемуся спискуТо есть тут можно использовать готовые функции работы с массивами вместо сложных циклов с кучей if внутри.> $job = get_class($search->getJob());> $search->setJob(new $job(), $maxRank, true);Тут стоило сделать метод changeRank() в Employee. Так как этот класс отвечает за хранение и обновление ранга, и код логичнее всего поместить в него. И $e->changeRank(...) проще читать, чем это. Неудачно сделан учет ранга. Логично иметь объект Job с базовыми (неизменными) ставками, и отдельно поле rank, и при расчете зарплаты учитывать ранг. А ты вместо этого меняешь сами базовые ставки в объекте Job. Если вызвать метод updateJob() несколько раз, то базовая ставка будет многократно увеличена: $emp->updateJob(3);$emp->updateJob(3);$emp->updateJob(3);То есть этот метод работает некорректно.