Рассмотрим следующий класс:
<?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
, который
будет находить среднее арифметическое чисел.