Азы объектов
Класс описывает переменные, свойства, процедуры и события объекта. Объекты являются экземплярами классов. Определив класс, вы можете создать из него любое количество объектов.
Microsoft, определение различий
Те условно говоря, любой наш проинициализированный класс является объектом.Пример:
// Наш класс
class ShopProduct {}
// Объекты нашего класса
$product1 = new ShopProduct();
$product2 = new ShopProduct();
Дополнительные поля данных в классах — называются свойства. Главная особенности, эти данные могу варьироваться от объекта к объектуПример:
class ShopProduct {
public $title = "Название товара не задано";
public $producerName = "Название производителя товара";
public $producerFirstName = "ИМЯ производителя товара не задано";
public $price = "Цена товара не задано";
}
Из-за того, что данные свойства public — мы спокойно можем пере-присвоить их в рамках объекта. Дать новое значение
Пример:
// Объекты нашего класса
$product1 = new ShopProduct();
$product2 = new ShopProduct();
$product1->title = "Полезный товар";
Важный момент, свойства могут быть только у объекта, что не очень хорошо. Те допустим, если выполнить код:
// Объекты нашего класса
$product1 = new ShopProduct();
$product2 = new ShopProduct();
$product1->titleUnExisted = "Полезный товар";
Никаких ошибок не будет, тк по мнению интерпретатора ничего страшного не случилось. Это может посадить огромное количество ошибок. Поэтому так взаимодействовать даже с public свойствами нельзя.
Методы — это специальные функции, объявляемые в классе. Что бы не запутаться: функции вне тела класса, в теле класса — методы
Создание метода конструктораВсе как и везде, вызывается метод __contructor() при инициализации, через который можно прокинуть значения свойств и выполнить всю логику, что бы класс являлся рабочим
Но в книге есть крутая штука, свойства можно передавать не параметрами в метод, а просто обозначать свойства прямо в конструкторе.
class ShopProduct {
public function __construct() {
public $title,
public $producerFirstName = "",
public $producerLastName = "",
public $price = 0,
}
}
$instance = new ShopProduct("Книга о саморазвитии!");
И все будет отлично работать!
!! именованные аргументы
$product1 = new ShopProduct(
price: 0.7,
title: "Каталог книг "
);
Работает как магия, куча сахара. Но как приятно!
Наследование — это механизм, посредством которого один или несколько классов можно получить из некоторого базового класса.
Наследования
// Листинг 3.64
// Класс ShopProduct...
public function getSummaryLine(): string
$base = "{$this->title} ( {$this->producerMainName} ,"
$base .= "{$this->producerFirstName} )";
return $base;
}
// Листинг 3.65
// Класс BookProduct...
public function getSummaryLine(): string
{
$base = parent::getSummaryLine();
$base .=
{$this->numPages} стр.";
return $base;
}
:::tip Забавный кейс. Можно у класса родителя оставлять метод, а потом его просто дополнять. Я просто не думаю об этом. Вероятно в конструкторе все круто, но вот что так можно использовать в обычных методах — я не думал. Крутой кейс
:::
Управление доступом к классам: модификаторы public
, private
и protected
Элементы класса можно объявить как public
(открытые), private
(закрытые) или protected
(защищенные). Это означает следующее.
- К открытым свойствам и методам можно получать доступ из любого контекста.
- К закрытому свойству и методу можно получить доступ только из того класса, в котором они объявлены. Даже подклассы данного класса не имеют доступа к таким свойствам и методам.
- К защищенным свойствам и методам можно получить доступ либо из содержащего их класса, либо из его подкласса. Никакому внешнему коду такой доступ не предоставляется.
Ключевые слова для поиска
Классы и объекты — основные понятия ООП Объект как экземпляр класса Свойства объектов — определение и использование Public, private, protected модификаторы доступа Методы класса — объявление и использование Конструктор в классе (__construct) инициализация объекта Передача свойств через конструктор Наследование классов и методы родительского класса Объявление и использование методов и свойств в классе Переопределение методов в наследуемых классах Именованные аргументы при создании объектов Ошибки при работе с public свойствами ООП на примере PHP