Public и private онлайн урок.


В предыдущих уроках мы использовали область видимости public доступ к свойствам и методам объекта. Это означало, что все свойства и методы объекта могут быть использованы в любой точке скрипта - как вне класса, так и внутри него.

Рассмотрим спецификатор доступа private. Этот спецификатор доступа говорит о том, что свойство или метод объекта может быть использован(о) только внутри методов этого же класса. Т.е. оно является закрытым от внешнего кода.

Рассмотрим пример:



Формально private означает, что соответствующее свойство можно использовать лишь внутри определения самого класса. В то же время public можно использовать везде. В данном примере у нас закрыт доступ извне к $foo и somth(). Это значит, что мы можем их использовать лишь внутри методов самого класса - обращаясь к переменной $this

Замечание. Какое из свойств объекта будет private или public, как правило, следует из логики моделирования.

Замечание. Для работы с закрытыми свойствами из контекста объекта часто создают специальные методы - геттеры (getters) и сеттеры (setters), которые возвращают значение закрытого свойства и задают значение закрытого свойства соответственно. Например:

class Test
{
private $val;

public function setVal($val)
{
$this->val = $val;
}

public function getVal()
{
return $this->val;
}
}

$t = new Test;
$t->setVal(22);


Это удобно тем, что в сеттерах и геттерах мы можем задать логику записи значения в свойство объекта и логику получения значения из записи объекта.

Проверьте свои знания
В класс Car из предыдущих заданий добавить private свойство price, а также публичные геттер и сеттер для него. Геттер должен зависеть от одного параметра. В зависимости от того, было ли в функцию геттера передано true, выводить отформатированную цену, либо же в обычном виде (использовать функцию number_format). Сеттер должен приводить входящий параметр к числу, у которого не более 2 знаков после запятой (использовать round).