Ти стикаєшся з викликом вивчити основи об'єктно-орієнтованого програмування на PHP? У центрі цієї теми стоять спеціальні посилання $this та self. Ці два ключові слова є вирішальними для роботи з об'єктами та класами в PHP, оскільки вони контролюють комунікацію та доступ до змінних екземпляру й констант. Давай разом розглянемо відмінності та використання цих концепцій.
Найважливіші висновки
- $this є посиланням на поточний об'єкт і використовується в методах екземпляру.
- self посилається на поточний клас і використовується для доступу до статичних властивостей і методів, а також констант.
- Різниця між $this та self є фундаментальною для розуміння об'єктно-орієнтованого програмування в PHP.
Розуміння посилання $this
Розпочнемо з ключового слова $this. $this є спеціальною змінною, яка посилається на поточний об'єкт. Коли ти звертаєшся до $this всередині методу екземпляру, ти можеш отримати доступ до всіх змінних та методів цього конкретного об'єкта.

Припустимо, ти маєш клас БазаДаних, який ти створюєш. Всередині методу цього класу ти можеш, наприклад, отримати доступ до змінних екземпляру, таких як User або Pass. Це здійснюється через $this->User або $this->Pass. Ці змінні існують лише в контексті відповідного об'єкта, тому $this є вирішальним.
Важливо знати, що $this є універсальним посиланням, яке завжди вказує на поточний об'єкт. Якщо існують інші об'єкти, $this залежно від контексту вказуватиме на відповідний об'єкт, в якому знаходиться код.
Ключове слово self в деталях
Ключове слово self, навпаки, не обмежується жодним екземпляром. Воно посилається на сам клас, що дозволяє тобі отримувати доступ до статичних властивостей та констант класу. Ще раз розглянемо клас БазаДаних. Припустимо, ти визначив константу в цьому класі. Ти можеш отримати доступ до цієї константи, використовуючи self::Константа.

Зверни увагу, що self, перш за все, корисна для статичних методів і властивостей. Такі змінні є присутніми для всього екземпляра класу одноразово, а не для кожного окремого об'єкта. Це є центральною відмінністю від змінних екземпляру.
Звісно, існує також випадок, коли ти хочеш отримати доступ до статичних методів або констант у методі класу. У такому випадку ти використовуєш self::Метод(), щоб переконатися, що доступ здійснюється через клас, а не через екземпляр.

Зробимо практичний приклад
Уяви, що ти хочеш створити клас SIS. Ось простий приклад, щоб продемонструвати використання обох посилань.

Всередині цього класу ми можемо визначити статичні властивості та методи. Скажімо, у тебе є метод getName(), який використовує змінну екземпляру name. Щоб отримати доступ до цієї змінної екземпляру, ти використовуєш $this->name.

Однак, щоб отримати доступ до константи KEY_PATH, яка визначена в класі, ти використовуєш self::KEY_PATH. Це забезпечує те, що при доступі до констант ти не потрапиш у конфлікт екземплярів.
Нарешті, ти демонструєш за допомогою echo, що посилання працюють. Ти можеш без проблем виводити як змінні екземпляру, так і константні значення, щоб продемонструвати, що вони правильно посилаються.

Резюме – Розуміння $this та self у PHP
У сьогоднішньому дописі ти дізнався основи використання та відмінностей між $this та self в об'єктно-орієнтованому програмуванні на PHP. У той час як $this спеціально вказує на поточний об'єкт, self націлюється на сам клас. Ці концепції є фундаментальними для ефективної розробки в PHP.
Поширені запитання
У чому різниця між $this і self?$this посилається на поточний об'єкт, тоді як self вказує на сам клас.
Коли я повинен використовувати $this?Використовуй $this, коли хочеш отримати доступ до змінних або методів екземпляру.
Коли self є доцільним?self є доцільним, коли ти хочеш отримати доступ до статичних властивостей або констант класу.
Чи існує особливий випадок для self?Так, self корисно для доступу до членів класу в статичних методах.
Як я можу бути впевненим, що я правильно отримую доступ до змінних екземпляру?Використовуй $this->ім'яЗмінної, щоб переконатися, що ти отримуєш доступ до специфічних для екземпляру значень.