Для того щоб зрозуміти мову РНР, необхідно вивчити елементи  за допомогою яких вона працює. В даній сторінці будуть розглянуті з поясненням всі інструменти.

Почнемо з класів і обєктів: дуже важливо зрозуміти різницю між ними і чітко уявляти яке місце займає кожен.

Очевидно що різениця між класами і обєктами існує. Якщо клас може належати до типу даних, то обєкт не може бути прирівняний тільки до одної змінної або до значення визначеного типом даних.

Якщо провести паралель між фактичною структурою і класами РНР, то можна було би сказати, що класи РНР це “фабрика”. В випадку класів ця “фабрика” виробляє обєкти. Їх особливостю являється те, що вони володіють одинаковою структурою, одинаковими властивостями і одинаковими методами в рамках відповідного класу.

Основні терміни

Класс являється основним поняттям обєктно–орієнтованого програмування.

Класс — це опис методів і властивостей. Класс не створюється і не використовується в програмі.

Обєкт це змінна, яка має властивості і методи, опис в класі, від якого він створюється. Можна створити декілюка обєктів від одного класу.

Властивість  — це та сама змінна, тільки в середині обєкта.

Метод — це та сама функція, тільки в середині обєкта.

Обєкт — це структурована змінна, яка містить всю інформацію про деякий фізичний предмет.

Класс — це опис таких обєктів і дій, які можна виконувати.

Клас визначається за допомогою наступного синтаксису.

class Імя_класу{

var $імя_властивості;

/*список властивостей*/

function імя_метода(){

/*визначення метода*/

}

/*cgbcjr методsd*/

}

Обявлення класу повинно починатись з ключового слова class. Кожній обявленій властивості, яка міститься в класі, повинно наслідуватис  ключове слово var. Властивості можуть відноситись до любого типу даних, підтримуваних в РНР.

Після обявлення властивостей слідує обявлення методів, похоже на обявлення функцій.

Імена класів як за хвичай починаються з прописної букви, а всі слова в в іменах методів, крім першого, починаються з прописних букв (перше слово починається з строчної букви).

Класи являються як би шаблонами для реальних змінних. Змінна потрібного типу(обєкт) створюється із класу з лопомогою оператора new.

Створивши обєкт, ми можемо примінити до нього всі методи і отримати всі властивості визначені в описі класу.

Для цього використовується такий синтаксис.

$імя_обєкта–>назва_властивості

або 

$імя_обєкта–>назва_метода(список аргументів).

Відзначу що перед назвою властивості чи метода знак $ не ставиться.

Приклад

Для того щоб краще зрозуміти візьмем приклад. “Людина” а зараз уявим її в якості обєкта в синтаксис РНР.

Кожна людина володіє виділеними характеристиками, які відрізняють її від інших людей, це вік, вага, стать. які еквавілентні властивостям обєкта.Крім того кожна людина виконує визначені види діяльності — працює, їсть, спить, ходить, бігає які предявлені методом обєкта.

Так як люди володіють визначеними характеристиками, то ми можемостворити шаблон “Людина()” можем визначити основні характеристики і здібності кожної людини як загальний характер.

Цей клас “Людина()”  може використовуватись для обєкта “$людина”, індивідуальні властивості людини можуть також оброблятись окремо від інших обєктів такого ж типу. Отже клас людина буде виглядати наступним чином.

<?PHP

//визначення класа

class Людина {

//визначення властивості

public $імя;

public $вага;

public $вік;

public $стать;

public $колір;

//визначення методів

public function їжа()

{

echo $this–>імя.”їжа…”;

}

public function біг()

{

echo $this–>імя.”біг…”;

}

public function робота()

{

echo $this–>імя.”робата…”;

}

public function сон()

{

echo $this–>імя.”сон…”;

}

}

?>

Тут ми можемо створити декілька людей

<?PHP

$Іван = new Людина;

//імя

$Іван–>імя =”Іван Попадайло”;

//який вік

$Іван–>вік =”26″;

//стать

$Іван–>стать=”мужчина”;

//колір очей

$Іван–>колір =”синій”;

//вага

$Іван–>вага =95;

$діана=new Людина

//імя

$діана–>імя =”Діана Бухаріна”;

//який вік

$діана–>вік =”26″;

//стать

$діана–>стать=”жінка”;

//колір очей

$діана–>колір =”карий”;

//вага

$діана–>вага =55;

$максим=new Людина

//імя

$максим–>імя =”Максим Хрюшин”;

//який вік

$максим–>вік =”76″;

//стать

$максим–>стать=”чоловік”;

//колір очей

$максим–>колір =”карий”;

//вага

$максим–>вага =55;

$іван–>працює();

$діана–>їсть();

$максим–>їсть();

$діана–>спить();

$іван–>спить();

$максим–>їсть();

?>

В прикладі визначені нові обєкти, методи і властивості, які можуть бути доступні незалежно для кожного.

<?PHP

//визначення класу

class Людина{

//визначаємо властивість public

public $імя;

public $вік;

//інші властивості

//визначаємо метод public

public function їжа() {

echo $this–>імя.”їжа…”;

}

//інші методи

}

?>

специфікатори доступу

В версії РНР 5 появились так звані специфікатори доступу public, protected, і private з допомогою яких визначається ступінь доступу до властивостей і методів класу.

До загальнодоступних (public) властивостей і методів можна отрамати доступ без яких небуть ограничень.

Захищені (protected) елементи класу доступні всередені класу, в якому вони обявлені, і в виготовлених від нього класах.

Частні (private) елементи доступні тільки в класі, в якому вони обявлені.

В випадку коли не вказана ніякий специфікатор елемент буде мати по замовчуванню рівень доступу public.

Слід відзначити, що символ —> використовується для виклику різних властивостей і методів обєктів, символ $ опускається тоді, коли є доступ до змінної обєкта.

Для доступу до функцій і змінних класу навіть всередині доступу ми використовуємо слово $this яке використовується в якості посилання на дану інстанцію.

Щоб побачити як він працює можна змінити уже відому нам по попереднім прикладам функцію їжа(), для того щоб прийняти в якості параметрів кількість одиниць продуктів харчування, які прибавляються до ваги людини.

Приклад

<?PHP

// визначення класу

class Людина {

// визначення властивостей

public $імя;

public $вага;

// визначення методів

public function їжа($кілограми) {

echo $this–>імя.”їжа”.$кілограми.” кілограми їжі…”;

$this–>вага+=$кілограми

}

}

?>

В прикладі $this вказано, що змінна, яка буде оброблятись, була визначена як властивість представленого класу. Це можна інтерпретувати як “Для обєкта знайдений аргумент функції ЇЖА()  для змінної $ВАГА“.

Таким чином, ключове слово, $this забезпечує простий спосіб способу до змінної і локальних функцій класу.

Конструктори

Конструктор — це метод обєкта, який викликається автоматично прикожному створені обєкта.

Як правило конструктори використовуються для присвоєння першопочаткових  значень властивостям обєкта. І хоча конструктор появився в РНР давно, в РНР 5 була змінена схема найменування конструктора — метод_ _construct() являється тепер конструктор класу.

Аналогічно при знищені обєкта викликається спеціальний метод _ _destract()–  деструктор класу. Необхідність в виклику деструкторів виникає лише при роботі з обєктами, які використовують великий обєм ресурсів, так як всі змінні і обєкти автоматично знищуються по завершені сценарія.

Наприклад якщо ми хочемо що би всі наші новонароджені були з карими очима і важили 3 кг, ми вводимо наступний приклад в код

<?PHP

// визначення класу

class Людина {

// визначення властивостей

public $імя;

public $вага;

public $вік;

public $колір;

// constructor

public function _ _constuctor() {

$this—>вік=0

$this—>вага=5

$this—>колір=”карий”;

}

//

}визначення методів

?>

Наслідування класу

Основними перевагами РНР, будь то версія 4 або версія 5, являється наслідування і розширення. Це означає що ми можемо створювати новий клас із уже існуючого класу шляхом додавання нових властивостей і методів.

Піся чого ми зможемо визначити нові інстанції цього класу. Ці обєкти наслідування будуть володіти тими ж властивостями батьківського класу, які унаслідувані від нього наряду з новими властивостями і методами нового класу.

Із класу не можна видалити ніякі існуючі властивості і функції, клас можна тільки розширити.

Розширяються класт в РНР з допомогою ключового слова extends. В випадку наслідування всіх функцій і змінні батьківського класу (базового класу) доступні в новому класі.

Приклад

<?PHP

class Basa {

function basa_funct() { echo “<h1></h1>”;}

function test () { echo “<h1></h1>”;}

}class Pro extends Basa {

function pro_funct() { echo “<h2></h2>”;}

}

$object= new Basa;

$object= new Pro;

$object–>Basa_funct();// виводить “Це базова функція”

$object–>Pro_funct();// виводить “Це проізвольна функція”

$object–>Test_funct();// виводить “Це проізвольний клас”

?>

В кінці цієї сторінки  посилання  на публікації про елементи основані на РНР.