😎 » PHP - FAQ » Основы PHP8 » Класи та об'єкти PHP
323 0  

Класи та об'єкти 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 відноситься до відповідного значення властивості об'єкта, що викликається.


Кожен об'єкт може мати власні значення для властивостей класу.



Залишити свій коментар:

Досвід у веброзробці:

2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2009
2023