# Начальные значения свойств при объявлении

Рассмотрим следующий класс:

`<?php class Test { public $prop1; public $prop2; public function __construct() { $this->prop1 = 'value1'; // начальное значение свойства prop1 $this->prop2 = 'value2'; // начальное значение свойства prop2 } } $test = new Test; echo $test->prop1; // выведет 'value1' echo $test->prop2; // выведет 'value2' ?>`

Как вы видите, в этом коде в конструкторе объекта мы задаем начальные значения свойств. На самом деле можно сократить лишний код, задав начальные значения свойств прямо при их объявлении:

`<?php class Test { public $prop1 = 'value1'; // начальное значение свойства prop1 public $prop2 = 'value2'; // начальное значение свойства prop2 } $test = new Test; echo $test->prop1; // выведет 'value1' echo $test->prop2; // выведет 'value2' ?>`

## Замечания

Конечно же, не обязательно задавать начальные значения всем свойствам:

`<?php class Test { public $prop1 = 'value1'; // задаем начальное значение public $prop2; // не задаем } ?>`

При задании начальных значений свойств можно выполнять некоторые операции (самые примитивные):

`<?php class Test { public $prop = 1 + 2; // найдем сумму чисел } $test = new Test; echo $test->prop; // выведет 3 ?>`

## Применение

Пусть у нас есть вот такой класс `Student`, в конструкторе которого задается начальное значение свойства `course`:

`<?php class Student { private $name; private $course; public function __construct($name) { $this->name = $name; $this->course = 1; // начальное значение курса } public function transferToNextCourse() { $this->course++; } } ?>`

Давайте вынесем начальное значение курса в объявление свойства:

`<?php class Student { private $name; private $course = 1; // начальное значение курса public function __construct($name) { $this->name = $name; } public function transferToNextCourse() { $this->course++; } } ?>`

## Применение

Пусть у нас есть вот такой класс `Arr`, у которого есть метод `add` для добавления чисел и метод `getSum` для получения суммы всех добавленных чисел:

`<?php class Arr { // Массив для хранения чисел: private $numbers; // Добавляет число в набор: public function add($num) { $this->numbers[] = $num; } // Находит сумму чисел набора: public function getSum() { return array_sum($this->numbers); } } ?>`

Давайте воспользуемся нашим классом `Arr` - добавим несколько чисел и найдем их сумму:

`<?php $arr = new Arr; $arr->add(1); $arr->add(2); $arr->add(3); echo $arr->getSum(); // выведет 6 ?>`

Все вроде работает, но что будет, если сразу после создания вызвать метод `getSum`? Вот таким образом:

`<?php $arr = new Arr; echo $arr->getSum(); ?>`

Такой код вызовет ошибку, потому что функция `array_sum` пытается найти сумму массива из свойства `numbers`. Но это свойство еще не определено и имеет значение `null`. Это и приводит к ошибке. Давайте исправим проблему, объявив наше свойство пустым массивом:

`<?php class Arr { private $numbers = []; // задаем начальное значение свойства как [] public function add($num) { $this->numbers[] = $num; } public function getSum() { return array_sum($this->numbers); } } ?>`

Проверим:

`<?php $arr = new Arr; echo $arr->getSum(); // выведет 0 ?>`

Реализуйте класс `Arr`, похожий на тот, который я реализовал выше. В отличие от моего класса метод `add` вашего класса параметром должен принимать массив чисел. Все числа из этого массива должны добавляться в конец массива `$this->numbers`.

Реализуйте также метод `getAvg`, который будет находить среднее арифметическое чисел.

←→
↑