Відмінності між версіями «Класи. Об'єкти. Посилання.»
Рядок 1: | Рядок 1: | ||
− | + | == Клас та об'єкт == | |
<b>Клас</b> - це якась структура даних і методів, яка дозволяє описати деякий об'єкт (до речі, об'єкт - це вже інше поняття). А якщо говорити простими словами, то можна привести наочний приклад. | <b>Клас</b> - це якась структура даних і методів, яка дозволяє описати деякий об'єкт (до речі, об'єкт - це вже інше поняття). А якщо говорити простими словами, то можна привести наочний приклад. | ||
Рядок 35: | Рядок 35: | ||
} | } | ||
?> | ?> | ||
+ | |||
+ | клас всіх автомобілів. Клас досить урізаний, але основа зрозуміла. | ||
+ | |||
+ | |||
+ | === Модифікатори доступу === | ||
+ | |||
+ | Тепер поговоримо про модифікатори доступу. Вони бувають трьох видів: public, protected і private. | ||
+ | |||
+ | <b>public</b> - значить, що властивість чи метод з таким модифікатором доступний ззовні класу скрізь, де програмісту захочеться. Цей модифікатор ставиться за замовчуванням, якщо не визначено іншого. | ||
+ | |||
+ | <b>protected</b> і <b>private</b> - означають, що метод або властивість є тільки всередині цього класу. protected і private розрізняються тільки у разі спадкування класів, про що ми поговоримо в окремій статті. | ||
+ | |||
+ | <? | ||
+ | class MyClass | ||
+ | { | ||
+ | public function myMethod() | ||
+ | { | ||
+ | } | ||
+ | protected function myMethod2() | ||
+ | { | ||
+ | } | ||
+ | private function myMethod3() | ||
+ | { | ||
+ | } | ||
+ | } | ||
+ | |||
+ | $obj = new MyClass; | ||
+ | $obj->myMethod(); // можна | ||
+ | $obj->myMethod2(); // ні! Помилка доступу | ||
+ | $obj->myMethod3(); // ні! Помилка доступу | ||
+ | ?> | ||
+ | |||
+ | Ключовим словом <b>new</b> я сказав PHP створити об'єкт класу MyClass і зберегти його у змінній $obj. Потім я спробував викликати відкритий метод myMethod і цей виклик у мене успішно спрацював. Потім я спробував звернутися до захищених методам класу myMethod2 і myMethod3, але пхп почав лаятись і перервав виконання скрипта. А навіщо тоді потрібні захищені методи, якщо їх не можна викликати? | ||
+ | |||
+ | Викликати їх насправді можна, тільки не ззовні класу, а всередині його: | ||
+ | |||
+ | <? | ||
+ | class MyClass | ||
+ | { | ||
+ | public function myMethod() | ||
+ | { | ||
+ | $this->myMethod2(); | ||
+ | $this->myMethod3(); | ||
+ | } | ||
+ | protected function myMethod2() | ||
+ | { | ||
+ | $this->myMethod3(); | ||
+ | } | ||
+ | private function myMethod3() | ||
+ | { | ||
+ | } | ||
+ | } | ||
+ | ?> | ||
+ | |||
+ | Те ж саме відноситься і до властивостей класу: звертатися до захищених властивостям можна тільки всередині самого класу або в класі-спадкоємця, якщо властивість не позначено як private. | ||
+ | |||
+ | === Покажчик this === | ||
+ | |||
+ | А що таке $ this? А це покажчик на самого себе. Він може використовуватися усередині самого класу, щоб звертатися до своїх же методам і властивостям. | ||
+ | |||
+ | === Конструктори і деструктори === | ||
+ | |||
+ | Будь-який об'єкт в PHP завжди створюється в пам'яті, а потім рано чи пізно знищується. За це відповідають спеціальні невидимі методи класу - конструктори і деструктори. Але невидимі вони тільки якщо ми їх самі не визначимо: | ||
+ | |||
+ | <? | ||
+ | class MyClass | ||
+ | { | ||
+ | function __construct() | ||
+ | { | ||
+ | echo "Запущен конструктор"; | ||
+ | } | ||
+ | function __destruct() | ||
+ | { | ||
+ | echo "Запущен деструктор"; | ||
+ | } | ||
+ | } | ||
+ | $obj = new MyClass(); // Виводить "Запущен конструктор" | ||
+ | unset($obj); // Виводить "Запущен деструктор" | ||
+ | ?> | ||
+ | |||
+ | |||
+ | Таким чином, ключове слово new створює новий об'єкт в пам'яті, викликаючи перед цим конструктор цього об'єкту, в якому можна присвоїти якимось властивостями об'єкта якісь значення або ще що-нитка корисне / потрібне зробити. Зауважу, що конструктор не може повертати значення, як звичайний метод класу, тобто return у нього писати не можна. Але конструктор може приймати параметри, чого не скажеш про деструктор, який повертати значення не може, і приймати параметри також не в змозі. | ||
+ | |||
+ | === Інші елементи === | ||
+ | |||
+ | В класі можуть бути і інші елементи, константи статичні елементи та ін. |
Поточна версія на 03:30, 20 травня 2010
Зміст
Клас та об'єкт
Клас - це якась структура даних і методів, яка дозволяє описати деякий об'єкт (до речі, об'єкт - це вже інше поняття). А якщо говорити простими словами, то можна привести наочний приклад.
Розглянемо автомобіль. У автомобіля є властивості і є функції, які він може виконувати. Серед властивостей можна виділити, наприклад, витрата палива, колір кузова, об'єм двигуна, тип кузова, тип коробки передач і т.д. Основні функції автомобіля - їхати вперед / назад, повернути ліворуч / праворуч і т.д.
Автомобіль ЗАЗ 968М - належить до класу легкових автомобілів. Або Subaru Forester - теж належить до класу легкових авто. Різниця між запорожцем і субару звичайно суттєва, але насправді вони мають багато спільного - ті ж колір кузова, розхід палива і т.ін. Тому ці дві контрастно-розрізняються машини можна виділити в один клас - клас легкових авто.
Ці дві машини є двома абсолютно різними об'єктами. Зрозуміло, що вони сильно розрізняються. І нехай у мене кине камінь той, хто зі мною не погодиться.
От я і навів приклад, що таке клас, а що таке об'єкт.
Властивості та методи
Тепер про те, як описується клас в PHP на прикладі опису класу автомобілів:
<? class Car { protected $bodyColor; // властивість «колір кузова» protected $fuelRate; // властивість «расход топлива» protected $engineVolume; // властивість «об'єм двигуна» public function accelerate() { // довавте галузь // … } public function slowdown() { // тормозити // … } } ?>
клас всіх автомобілів. Клас досить урізаний, але основа зрозуміла.
Модифікатори доступу
Тепер поговоримо про модифікатори доступу. Вони бувають трьох видів: public, protected і private.
public - значить, що властивість чи метод з таким модифікатором доступний ззовні класу скрізь, де програмісту захочеться. Цей модифікатор ставиться за замовчуванням, якщо не визначено іншого.
protected і private - означають, що метод або властивість є тільки всередині цього класу. protected і private розрізняються тільки у разі спадкування класів, про що ми поговоримо в окремій статті.
<? class MyClass { public function myMethod() { } protected function myMethod2() { } private function myMethod3() { } }
$obj = new MyClass; $obj->myMethod(); // можна $obj->myMethod2(); // ні! Помилка доступу $obj->myMethod3(); // ні! Помилка доступу ?>
Ключовим словом new я сказав PHP створити об'єкт класу MyClass і зберегти його у змінній $obj. Потім я спробував викликати відкритий метод myMethod і цей виклик у мене успішно спрацював. Потім я спробував звернутися до захищених методам класу myMethod2 і myMethod3, але пхп почав лаятись і перервав виконання скрипта. А навіщо тоді потрібні захищені методи, якщо їх не можна викликати?
Викликати їх насправді можна, тільки не ззовні класу, а всередині його:
<? class MyClass { public function myMethod() { $this->myMethod2(); $this->myMethod3(); } protected function myMethod2() { $this->myMethod3(); } private function myMethod3() { } } ?>
Те ж саме відноситься і до властивостей класу: звертатися до захищених властивостям можна тільки всередині самого класу або в класі-спадкоємця, якщо властивість не позначено як private.
Покажчик this
А що таке $ this? А це покажчик на самого себе. Він може використовуватися усередині самого класу, щоб звертатися до своїх же методам і властивостям.
Конструктори і деструктори
Будь-який об'єкт в PHP завжди створюється в пам'яті, а потім рано чи пізно знищується. За це відповідають спеціальні невидимі методи класу - конструктори і деструктори. Але невидимі вони тільки якщо ми їх самі не визначимо:
<? class MyClass { function __construct() { echo "Запущен конструктор"; } function __destruct() { echo "Запущен деструктор"; } } $obj = new MyClass(); // Виводить "Запущен конструктор" unset($obj); // Виводить "Запущен деструктор" ?>
Таким чином, ключове слово new створює новий об'єкт в пам'яті, викликаючи перед цим конструктор цього об'єкту, в якому можна присвоїти якимось властивостями об'єкта якісь значення або ще що-нитка корисне / потрібне зробити. Зауважу, що конструктор не може повертати значення, як звичайний метод класу, тобто return у нього писати не можна. Але конструктор може приймати параметри, чого не скажеш про деструктор, який повертати значення не може, і приймати параметри також не в змозі.
Інші елементи
В класі можуть бути і інші елементи, константи статичні елементи та ін.