Давай для начала посмотрим на ошибки, а потом придумаем способ исправить. Ты решил сделать 1 класс, который обозначает Работника и 1 класс который представляет Депарамент. Но при этом код, относящийся чисто к Работнику, ты размазал по всей программе вместо того чтобы заключить его в одном классе. Например, расчет зарплаты: > $k = $key > 0 ? ($key > 1 ? 1.5 : 1.25) : 1; помещен в функцию countDep() которая рассчитывает суммы по департаментам. Допустим мы захотели дополнительно вывести поименный список всех работников департамента продаж с указанием зарплаты каждого. Как это сделать в твоем коде, если расчет зарплаты засунут в функцию countDep()? Копипастить? Это одна из самых плохих вещей которые может сделать программист. Получается, с твоим подходом мы зайдем в тупик. Это говорит о том, что расчет зарплаты надо было поместить в класс Работник, в этом случае мы можем из любого места программы вызвать: зарплата = работник.посчитатьЗарплату(); Это было бы правильно, в стиле ООП. Код расчета общей зарплаты по департаменту естественно должен быть в классе Департамент. Это были ошибки связанные с использованием ООП. Теперь пройдемся по обычным ошибкам. Ты на каждую профессию сделал отдельное свойство. Посчитай, в скольких местах придется переделывать код, чтобы добавить новую профессию? В правильной ООП-программе для этого достаточно было бы добавить 1 класс не трогая существующие. Также, я смотрю на эти 0, 0, 0 и не понимаю, что они значат. То есть сейчас я догадываюсь что это ранги, но это абсолютно не очевидно и нули никак не подписаны. Это плохо. > //array(type=>lvl) Это комментарии как бы намекают что код настолько запутанный что приходится его комментировать. Плюс, представь, мы захотим еще добавить, кроме ранга, опыт в годах и менять зарплату в зависимости от опыта. много ли придется переделывать? Придется переделывать всю программу. Это говорит о том, что она неправильно спроектирована. Вот, как лучше сделать: Лучше сделать в классе Департамент поле-массив работников и соответственно класть в него нужное число объектов-работников. Так каждому работнику будет соответствовать один объект и мы можем хоть каждому индивидуально рассчитывать зарплату, добавлять любое число рангов и правил, меняя только класс Работник и не трогая весь остальной код. Далее. Для работников лучше сделать не 1, а 4 класса — свой для каждой профессии. При этом, понятно что у них будет много общего. Чтобы показать что эти классы связаны, и чтобы не копипастить ничего, надо применить тут наследование. Наследование позволяет создавать класс не с нуля, а дополняя существующий. Мануал: http://p...content-available-to-author-only...p.net/manual/ru/language.oop5.inheritance.php Естественно, базовый класс надо будет пометить как абстрактный: http://p...content-available-to-author-only...p.net/manual/ru/language.oop5.abstract.php Если в мануале недостаточно понятно объяснено, задавай вопросы или почитай соответствующие главы в книге Зандстры (название в ОП-посте). > $advert->maEmployees[0] = 15; Этот код абсолютно непонятен. Чтобы сделать его понятным надо либо записать его в виде $advert->addEmployees(15, 0) — в этом случае понятно станет из названий переменных — либо сделать как я написал выше, массив работников. В данной задаче подойдет второй вариант. > $result[0] = $obj->name; 0 ничего не говорит. Надо использовать понятные имена. > switch ($typeEmplCounter) { > case "1": Это плохой код, так как "1" ничего не говорит. Что такое 1? Если тебе надо обозначать как-то типы объектов, надо использовать константы ( http://p...content-available-to-author-only...p.net/manual/ru/language.oop5.constants.php ): case Employee.TYPE_MANAGER: ... Сравни, насколько понятнее. Ну и в этой задаче switch исплоьзовать недопустимо, надо просто сделать 4 класса для разных профессий. При использовании switch код по мере развития быстро превращается в запутанную лапшу. Кстати, у тебя не учитываются расходы на босса. > foreach ($value as $word) Ну и мы изучаем ООП, потому таблицу логично бы сделать объектом — с методами добавитьСтроку(), нарисовать(), задатьВыравниваниеДляКолонки(). Если что-то непонятно из того, что я написал, уточняй. Все же это неплохая задача, сразу видно что человек понимает, а что нет.
Standard input is empty
Давай для начала посмотрим на ошибки, а потом придумаем способ исправить. Ты решил сделать 1 класс, который обозначает Работника и 1 класс который представляет Депарамент. Но при этом код, относящийся чисто к Работнику, ты размазал по всей программе вместо того чтобы заключить его в одном классе. Например, расчет зарплаты: > $k = $key > 0 ? ($key > 1 ? 1.5 : 1.25) : 1; помещен в функцию countDep() которая рассчитывает суммы по департаментам. Допустим мы захотели дополнительно вывести поименный список всех работников департамента продаж с указанием зарплаты каждого. Как это сделать в твоем коде, если расчет зарплаты засунут в функцию countDep()? Копипастить? Это одна из самых плохих вещей которые может сделать программист. Получается, с твоим подходом мы зайдем в тупик. Это говорит о том, что расчет зарплаты надо было поместить в класс Работник, в этом случае мы можем из любого места программы вызвать: зарплата = работник.посчитатьЗарплату(); Это было бы правильно, в стиле ООП. Код расчета общей зарплаты по департаменту естественно должен быть в классе Департамент. Это были ошибки связанные с использованием ООП. Теперь пройдемся по обычным ошибкам. > public $meEmployees = array(0, 0, 0); Ты на каждую профессию сделал отдельное свойство. Посчитай, в скольких местах придется переделывать код, чтобы добавить новую профессию? В правильной ООП-программе для этого достаточно было бы добавить 1 класс не трогая существующие. Также, я смотрю на эти 0, 0, 0 и не понимаю, что они значат. То есть сейчас я догадываюсь что это ранги, но это абсолютно не очевидно и нули никак не подписаны. Это плохо. > //array(type=>lvl) Это комментарии как бы намекают что код настолько запутанный что приходится его комментировать. Плюс, представь, мы захотим еще добавить, кроме ранга, опыт в годах и менять зарплату в зависимости от опыта. много ли придется переделывать? Придется переделывать всю программу. Это говорит о том, что она неправильно спроектирована. Вот, как лучше сделать: Лучше сделать в классе Департамент поле-массив работников и соответственно класть в него нужное число объектов-работников. Так каждому работнику будет соответствовать один объект и мы можем хоть каждому индивидуально рассчитывать зарплату, добавлять любое число рангов и правил, меняя только класс Работник и не трогая весь остальной код. Далее. Для работников лучше сделать не 1, а 4 класса — свой для каждой профессии. При этом, понятно что у них будет много общего. Чтобы показать что эти классы связаны, и чтобы не копипастить ничего, надо применить тут наследование. Наследование позволяет создавать класс не с нуля, а дополняя существующий. Мануал: http://p...content-available-to-author-only...p.net/manual/ru/language.oop5.inheritance.php Естественно, базовый класс надо будет пометить как абстрактный: http://p...content-available-to-author-only...p.net/manual/ru/language.oop5.abstract.php Если в мануале недостаточно понятно объяснено, задавай вопросы или почитай соответствующие главы в книге Зандстры (название в ОП-посте). > $advert->maEmployees[0] = 15; Этот код абсолютно непонятен. Чтобы сделать его понятным надо либо записать его в виде $advert->addEmployees(15, 0) — в этом случае понятно станет из названий переменных — либо сделать как я написал выше, массив работников. В данной задаче подойдет второй вариант. > $result[0] = $obj->name; 0 ничего не говорит. Надо использовать понятные имена. > switch ($typeEmplCounter) { > case "1": Это плохой код, так как "1" ничего не говорит. Что такое 1? Если тебе надо обозначать как-то типы объектов, надо использовать константы ( http://p...content-available-to-author-only...p.net/manual/ru/language.oop5.constants.php ): case Employee.TYPE_MANAGER: ... Сравни, насколько понятнее. Ну и в этой задаче switch исплоьзовать недопустимо, надо просто сделать 4 класса для разных профессий. При использовании switch код по мере развития быстро превращается в запутанную лапшу. Кстати, у тебя не учитываются расходы на босса. > foreach ($value as $word) > $maxWidth = $maxWidth < (mb_strlen($word)) ? mb_strlen($word) : $maxWidth; Можно написать в 1 строку с помощью max() и array_map(), попробуй. Ну и мы изучаем ООП, потому таблицу логично бы сделать объектом — с методами добавитьСтроку(), нарисовать(), задатьВыравниваниеДляКолонки(). Если что-то непонятно из того, что я написал, уточняй. Все же это неплохая задача, сразу видно что человек понимает, а что нет.