Класи та об'єкти PHP
Об'єктно-орієнтоване програмування (ООП) – це стиль програмування, покликаний зробити роздуми про програмуванні ближче до міркувань реальному світі.
Об'єкти створюються за допомогою класів, які є базовим поняттям ООП.
Клас описує те, чим стане об'єкт, але при цьому відокремлений від самого об'єкта. Іншими словами, клас можна сприймати як шаблон, опис чи визначення об'єкта.
:feel: Одразу практика:
//Клас який відповідає за завантаження картинки
class Load_Img
{
//метод отримує масив $_POST і вибирає з нього url картинки
public function decodeJs($_POST)
{
$del_img = trim($_POST['url_img1']);
return $del_img;
}
//метод який отримує url і записує у файл
public function imgSave()
{
// отримуємо ЗНАЧЕННЯ url із метода КЛАСУ
$img = $this->decodeJs();
/// ... далі код який записує картинку
}
}
Класи PHP
// Вивести підключені класи
print_r(get_declared_classes());
У PHP клас може включати змінні члена під назвою властивості визначення властивостей об'єкта і функцій під назвою методи визначення поведінки об'єкта. Визначення класу починається з ключового слова class, за яким слідує назва класу. Визначення властивостей та методів, що належать класу, полягають у фігурних дужках.
class Person
{
const NAMECONST = '24'; //Це константа класу
public $age; //Це властивість
public function speak() { //Це метод
echo "Hi!"
}
}
$obj_1 = new Person; //Це об'єкт
$obj_1->age = 24; // Передаємо у властивість нове значення
$obj_1->speak(); // звертаємось до метода класу
//===============
(new Person())->speak(); // Одночасно створюємо об'єкт класу і звертаємось до метода класу
*Припустиме ім'я класу починається з літери(принято з Заглавної літери) або підкреслення, за якими слідує будь-яка кількість літер, чисел або підкреслень
Зверніть увагу, що ключове слово public стоїть перед методом speak. Це специфікатор області видимості.
Ключове слово public вказує на те, що член доступний з будь-якого місця коду.
Константи класу та їх вивід:
<?php
class MyClass {
// Оголошення константи
const MY_CONSTANT = 'значення';
public function showConstant() {
// Виведення константи всередині методу класу
echo self::MY_CONSTANT;
}
}
// Виведення константи ззовні класу
echo MyClass::MY_CONSTANT . PHP_EOL;
// Створення екземпляра класу
$myClass = new MyClass();
// Виклик методу, який використовує константу
$myClass->showConstant();
?>
:belay: В константу класа можна передати тільки якесь значення та математичний вираз, а зміні і функції НЕМОЖНА!!!
Наслідування від батьківського класу:
<?php
class Cat {
public $name = "Василь";
function getstr() {
$str = "Имя кота: {$this->name}.";
return $str;
}
}
class my_Cat extends Cat {
public $age = 5;
function getstr() {
$str = parent::getstr();
$str .= "<br>Вік: {$this->age} років.";
return $str;
}
}
$obj = new my_Cat;
echo $obj->getstr();
?>
Елементи класу можна оголошувати як public (загальнодоступні), protected (захищені) та private (закриті). Розглянемо різницю між ними:
До public (загальнодоступних) властивостей та методів можна отримати доступ з будь-якого контексту.
До protected (захищеним) властивостям і методам можна отримати доступ або з класу, що містить їх, або з його підкласу. Ніякому зовнішньому коду доступу до них не надається.
private (закриті) - до таких властивостей та методів можна отримати доступ тільки з того класу, в якому вони оголошені. Навіть підкласи цього класу не мають доступу до таких даних.
<?php
class human {
public $age = 5;
public function say() {
echo "<br>hello";
}
}
$obj = new human;
echo "$obj->age"; // Допустимо
$obj->say(); // Допустимо
?>
<?php
class human {
private $age = 5;
function say() {
// всередині класу доступ до закритих даних є
echo "$this->age";
}
}
$obj = new human;
// Прямо із викликаючої програми доступу до закритих даних немає
echo "$obj->age"; // Помилка! доступ заборонено!
// однак за допомогою методу можна виводити закриті дані
$obj->say(); // Допустимо
?>
Метод.
Методи це функції, які зберігаються як властивості об'єкта.
Об'єкти PHP
Процес створення об'єкта класу називається інстанціюванням.
Щоб інстанцувати об'єкт класу, використовуйте ключове слово new, як показано нижче.
$bob = new Person();
*У вищезазначеному коді $bob є об'єктом класу Person.
Для отримання доступу до властивостей та методів об'єкта скористайтесь конструкцією -> (стрілка), приклад:
echo $bob->age;
Цей запит виводить значення властивості age для $bob. Якщо ви бажаєте надати значення властивості, використовуйте оператор присвоєння =, як і у разі використання змінних.
Давайте визначимо клас Person, інстанцуємо об'єкт, зробимо присвоєння та викличемо метод speak()
<?php
class Person {
public $age;
function speak() {
echo "Hi!";
}
}
$p1 = new Person();
$p1->age = 23;
echo $p1->age;
$p1->speak();
?>
$this
$this є псевдозмінною, яка посилається на об'єкт, що викликає. При роботі всередині методу використовуйте $this так само, як при використанні імені об'єкта за межами класу.
<?php
class Dog {
public $legs=4;
public function display() {
echo $this->legs;
}
}
$d1 = new Dog();
$d1->display();
echo '<br />';
$d2 = new Dog();
$d2->legs = 2;
$d2->display();
?>
* Ми створили два об'єкти класу Dog та викликали його методи display(). Оскільки метод display() використовує $this, значення legs відноситься до відповідного значення властивості об'єкта, що викликається.