Object
Клас - це шаблон або зразок, що описує змінні і функції для конкретного виду об'єкта.
Метод - це функція, визначена в класі.
Властивість (свойство) - це змінна, визначена в класі.
Екземпляр - це окремий приклад застосування класу. Створення нового екземпляра класу називається отриманням екземпляра об'єкта.
Конструктор - це спеціальний метод, який виконується автоматично при отриманні примірника об'єкта. Як правило, в конструкторах встановлюються властивості об'єктів і виконуються інші службові операції, що готують об'єкт до застосування.
Статичний метод - це особливий різновид методу, який можна викликати, не отримуючи екземпляр класу. Статичні методи не залежать від значень властивостей конкретного екземпляра
Зміст:
- Приклад 5.10. Оголошення класу і перевірка об'єкта
- Приклад 5.11. Створення об'єкта і взаємодія з ним
- Приклад 5.12 Копіювання об'єкта
- Приклад 5.13. Клонування об'єкта
- Конструктори
- Деструктори в PHP 5
- Написання методів
- Статичні методи в PHP 5
- Об'явлення свойств(властивостей)
- Статичні властивості і методи
- Успадкува́ння (наслідування)
- Інструкція parent
- Конструктори підкласу
- Методи Final
Приклад 5.10. Оголошення класу і перевірка об'єкта
<?php
$object = new User;
print_r($object);
class User {
public $name, $password;
function save_user() {
echo "Сюда помещается код, сохраняющий данные пользователя";
}
}
?>
Результат виконання коду:
User Object
(
[name] =>
[password] =>
)
Приклад 5.11. Створення об'єкта і взаємодія з ним
<?php
$object = new User;
print_r($object);
echo "<br>";
$object->name = "Joe";
$object->password = "mypass";
print_r($object);echo "<br>";
class User {
public $name, $password;
function save_user() {
echo "Сюда помещается код, сохраняющий данные пользователя";
}
}
?>
Результат виконання коду:
User Object
(
[name] =>
[password] =>
)
User Object
(
[name] => Joe
[password] => mypass
)
Приклад 5.12 Копіювання об'єкта
<?php
$object1 = new User();
$object1->name = "Alice";
$object2 = $object1;
$object2->name = "Amy";
echo "object2 name = " . $object1->name . "<br>";
echo "object2 name = " . $object2->name;
class User {
public $name;
}
?>
Результат виконання коду:
object1 name = Amy
object2 name = Amy
И $object1, и $object2 ссылаются на один и тот же объект, поэтому изменение свойства name, принадлежащего $object2, на Amy устанавливает такое же значение и для свойства, принадлежащего $object1.
Во избежание подобной путаницы следует использовать инструкцию clone, которая создает новый экземпляр класса и копирует значения свойств из исходного класса в новый экземпляр.
Приклад 5.13. Клонування об'єкта
<?php
$object1 = new User();
$object1->name = "Alice";
$object2 = clone $object1;
$object2->name = "Amy";
echo "object2 name = " . $object1->name . "<br>";
echo "object2 name = " . $object2->name;
class User {
public $name;
}
?>
Результат виконання коду:
object1 name = Alice
object2 name = Amy
Конструктори
При создании нового объекта вызываемому классу можно передать перечень аргументов. Они передаются специальному методу внутри класса, который называется конструктором и занимается инициализацией различных свойств
Пример 5.15. Создание метода-конструктора в PHP 5
<?php
class User {
function __construct($param1, $param2) {
//сюда вставляються інструкції конструктора
public $username = "Guest";
}
}
?>
Деструктори в PHP 5
Еще одним нововведением в PHP 5 стала возможность создания методов-деструкторов. Эта возможность подходит для тех случаев, когда код ссылается на объект в последний раз или когда сценарий подошел к концу. В примере 5.16 показано, как создается метод-деструктор.
Пример 5.16. Создание в PHP 5 метода-деструктора
<?php
class User {
function __destruct() {
// Сюда помещается код деструктора
}
}
?>
Написання методів
..використовується спеціальна змінна $this, яка може використовуватися для доступа до властивостей поточного об'єкта
Приклад 5.17. Використання в методі змінної $this
<?php
class User {
public $name, $password;
function get_password() {
return $this->password;
}
}
?>
Метод отримання пароля - get_password - застосовує змінну $ this для доступу до поточного об'єкту, а потім повертає значення властивості password, що належить цьому об'єкту
Клас, визначений в прикладі 5.17, потрібно використовувати наступним чином:
$object = new User;
$object->password = "secret";
echo $object->get_password();
Статичні методи в PHP 5
При роаботі в PHP 5 можна також визначити метод як статичний, що буде означати можливість його виклику в класі, але не в об'єкті. Статичний метод не має доступа до жодного з властивостей об'єкта.
Приклад 5.18. Створення статичного метода та доступу до нього
<?php
User::pwd_string();
class User {
static function pwd_string() {
echo "Будь ласка, введіть свій пароль";
}
}
?>
Статичні функції корисні щоб створювати дії, які відносяться до самого класу, але не до конкретних екземплярів цього класу.
Об'явлення свойств(властивостей)
Приклад 5.19. Неявне об'явлення свойства
<?php
$object1 = new User();
$object1->name = "Alice";
echo $object1->name;
class User {}
?>
Такий код буде коректно працювати і виведе строку(рядок) Alice, так як PHP неявним чином об'явить змінну $object->name. Але це може призвести до помилок, тому що свойство name було об'явлено за межами класу, тому краще об'являти свойства в межах класа явним чином
Визначення констант всередині класу
<?php
Translate::lookup();
class Translate {
const ENGLISH = 0;
const SPANISH = 1;
const FRENCH = 2;
const GERMAN = 3;
//...
Static function lookup() {
echo self::SPANISH;
}
}
?>
До котстант можна звертатися напряму, за допомогою ключового слова self і оператора двойної двокрапки.
Статичні властивості і методи
Пример 5.23. Определение класса со статическим свойством
<?php
$temp = new Test();
echo "Test A: " . Test::$static_property . "<br>";
echo "Test B: " . $temp->get_sp() . "<br>";
echo "Test C: " . $temp->static_property . "<br>";
class Test {
static $static_property = "Это статическое свойство";
function get_sp() {
return self::$static_property;
}
}
?>
Результат виконання коду:
Test A: Это статическое свойство
Test B: Это статическое свойство
Test C:
В этом примере показано, что на свойство $static_property можно ссылаться напрямую из самого класса, используя в Test A оператор двойного двоеточия. Test B также может получить его значение путем вызова метода get_sp объекта $temp, созданного из класса Test. Но Test C терпит неудачу, потому что статическое свойство $static_property недоступно объекту $temp
Успадкува́ння (наслідування)
В прикладі 5.24 клас Subscriber об'являється підкласом User шляхом використання інструкції extends.
Приклад 5.24. Налідовання і розповсюджування класа
<?php
$object = new Subscriber;
$object->name = "Fred";
$object->password = "pword";
$object->phone = "012 345 6789";
$object->email = "fred@bloggs.com";
$object->display();
class User2 {
public $name, $password;
function save_user() {
echo "Сюда помещается код, сохраняющий данные пользователя";
}
}
class Subscriber extends User2 {
public $phone, $email;
function display() {
echo "Name: " . $this->name . "<br>";
echo "Pass: " . $this->password . "<br>";
echo "Phone: " . $this->phone . "<br>";
echo "Email: " . $this->email;
}
}
?>
Результат виконання коду:
Name: Fred
Pass: pword
Phone: 012 345 6789
Email: fred@bloggs.com
Інструкція parent
Коли в підкласі створюється метод з ім'ям, яке вже фігурує в його рідному класі, його інструкції переписують інструкції з батьківського класу. Іноді така поведінка йде врозріз з вашими бажаннями, і вам потрібно отримати доступ до батьківського методу. для цього можна скористатися інструкцією parent, як показано в прикладі 5.25.
Приклад 5.25. Переписання метода та використання інструкції parent
<?php
$object = new Son;
$object->test();
$object->test2();
class Dad {
function test() {
echo "[Class Dad] Я твій батько<br>";
}
}
class Son extends Dad {
function test() {
echo "[Class Son] Я Лука<br>";
}
function test2() {
parent::test();
}
}
?>
Результат виконання коду:
[Class Son] Я Лука
[Class Dad] Я твій батько
Якщо потрібно забезпечити виклик метода з поточного класу, можна скоритсаться ключовим словом self:
self::method();
Конструктори підкласу
При поширенні класу і оголошенні власного конструктора, PHP не стане автоматично викликати метод-конструктор батьківського класу. Щоб забезпечувалося виконання всього коду ініціалізації, підклас, як показано в прикладі 5.26, завжди повинен викликати батьківські конструктори.
Приклад 5.26. Виклик конструктора батьківського класу
<?php
$object = new Tiger();
echo "У тигрів є...<br>";
echo "Хутро: " . $object->fur . "<br>";
echo "Полоски: " . $object->stripes;
class Wildcat {
public $fur; //У тигрів є хутро
function __construct() {
$this->fur = "TRUE";
}
}
class Tiger extends Wildcat {
public $stripes; //У тигрів є полоски
function __construct() {
parent::__construct(); //Першочерговий виклик батьквіського конструктора
$this->stripes = "TRUE";
}
}
?>
Результат виконання коду:
У тигрів є...
Хутро: TRUE
Полоски: TRUE
Методи Final
При необхідності перешкодити підкласу переписати метод суперкласу можна скористатися ключовим словом final. Як це робиться, показано в прикладі 5.27.
Приклад 5.27. Створення методу final
<?php
class User3 {
final function copyright() {
echo "Цей клас було створено by: Peturik";
}
}
$object = new User3;
echo $object->copyright();
?>
Цей клас було створено by: Peturik