# Передача объектов параметрами

Пусть у нас дан вот такой класс `Employee`:

`<?php class Employee { private $name; private $salary; public function __construct($name, $salary) { $this->name = $name; $this->salary = $salary; } public function getName() { return $this->name; } public function getSalary() { return $this->salary; } } ?>`

Давайте сделаем еще и класс `EmployeesCollection`, который будет хранить массив работников, то есть массив объектов класса `Employee`.

Пусть работники будут храниться в свойстве `employees`, а для добавления работников будет существовать метод `add`. Этот метод параметром будет принимать объект класса `Employee` и записывать его в конец массива `$this->employees`:

`<?php class EmployeesCollection { private $employees = []; // массив работников, по умолчанию пустой // Добавляем нового работника: public function add($employee) { $this->employees[] = $employee; // $employee - объект класса Employee } } ?>`

Давайте также добавим в наш класс метод `getTotalSalary`, который будет находить суммарную зарплату всех хранящихся работников:

`<?php class EmployeesCollection { private $employees = []; public function add($employee) { $this->employees[] = $employee; } // Находим суммарную зарплату: public function getTotalSalary() { $sum = 0; // Перебираем работников циклом: foreach ($this->employees as $employee) { $sum += $employee->getSalary(); // получаем з/п работника через метод getSalary() } return $sum; } } ?>`

Давайте проверим работу класса `EmployeesCollection`:

`<?php $employeesCollection = new EmployeesCollection; $employeesCollection->add(new Employee('john', 100)); $employeesCollection->add(new Employee('eric', 200)); $employeesCollection->add(new Employee('kyle', 300)); echo $employeesCollection->getTotalSalary(); // выведет 600 ?>`

Давайте сделаем наш класс `EmployeesCollection` более жизненным и добавим метод получения всех работников и метод подсчета:

`<?php class EmployeesCollection { private $employees = []; // Получаем всех работников в виде массива: public function get() { return $this->employees; } // Подсчитываем количество хранимых работников: public function count() { return count($this->employees); } public function add($employee) { $this->employees[] = $employee; } public function getTotalSalary() { $sum = 0; foreach ($this->employees as $employee) { $sum += $employee->getSalary(); } return $sum; } } ?>`

Сделайте класс `Product`, в котором будут приватные свойства `name`, `price` и `quantity`. Пусть все эти свойства будут доступны только для чтения.

Добавьте в класс `Product` метод `getCost`, который будет находить полную стоимость продукта (сумма умножить на количество).

Сделайте класс `Cart`. Данный класс будет хранить список продуктов (объектов класса `Product`) в виде массива. Пусть продукты хранятся в свойстве `products`.

Реализуйте в классе `Cart` метод `add` для добавления продуктов.

Реализуйте в классе `Cart` метод `remove` для удаления продуктов. Метод должен принимать параметром название удаляемого продукта.

Реализуйте в классе `Cart` метод `getTotalCost`, который будет находить суммарную стоимость продуктов.

Реализуйте в классе `Cart` метод `getTotalQuantity`, который будет находить суммарное количество продуктов (то есть сумму свойств `quantity` всех продуктов).

Реализуйте в классе `Cart` метод `getAvgPrice`, который будет находить среднюю стоимость продуктов (суммарная стоимость делить на количество всех продуктов).

←→
↑