стрілка вверх

основи php

Основи PHP.
Фундаментальні основи об'єктно-орієнтованої мови програмування.

з лютого 2016

Сontent

  1. Фундаментальні основи
  2. Що таке класс?
  3. Що таке об'єкт?
  4. Що таке властивість об'єкту?

Фундаментальні основи (принцип, концепція) об'єктно-орієнтованої мови програмування

обєктно орієнтовне програмування

Об'єктно - орієнтоване програмування (ООП) – це модель програмування, яка базується на стверджені того, що програма це сукупність об'єктів які взаємодіють між собою. Кожен об'єкт в цій моделі є незалежним, і він здатний отримувати, обробляти дані та відправляти ці дані іншим об'єктам.

В основі об'єктно-орієнтованої мови програмування лежать два основних поняття: клас та об'єкт. Об'єкт – це базове поняття в ООП, це конкретна реалізація, екземпляр класу.

Пояснимо поняття, що були використані у визначенні об'єктно-орієнтованої методології. Об'єкт — це реальна або абстрактна сутність, яка моделює частину навколишньої дійсності. Отже, кожний реальний предмет — це об'єкт. Прикладами реальних об'єктів є автомобіль, літак, завод, людина, матриця, вектор тощо. Ті самі слова: «автомобіль», «літак», «людина» тощо позначають не об'єкти, а класи, коли йдеться не про конкретний автомобіль, літак або людину, а, наприклад, про автомобіль або літак як різновид транспортного засобу і про людину як біологічний вид. Отже, клас є абстракцією множини об'єктів, що мають спільні властивості і поведінку. Транспортний засіб і біологічний вид — це теж класи. Відношення між літаком і транспортним засобом або між видом «homo sapiens» і біологічним видом взагалі є відношенням успадкування, або відношенням «є» (англ. «is а»): літак є різновидом транспортного засобу, вид «homo sapiens» є різновидом біологічного виду. Коли клас В є різновидом класу А, то А називається класом-предком, В — класом-нащадком.

Клас

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

Клас - це набір об'єктів, що володіють певними властивостями і методами роботи з ним.

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

Наприклад, клас Собака може характеризуватись рисами, притаманними всім собакам, зокрема: порода, колір хутра, здатність гавкати. Класи вносять модульність та структурованість в об'єктно-орієнтовану програму. Властивості та методи класу, разом називаються його членами.

Наприклад, Програмісти - це клас людей, які пишуть програми, вивчають комп'ютерну літературу і, крім того, як всі люди, мають ім'я та прізвище. Тепер, якщо взяти одного конкретного програміста, Васю Іванова, то можна сказати, що він є об'єктом класу Програмістів, має ті ж властивості, що й інші програмісти, теж має ім'я, пише програми і т.п.

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

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

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

class Імя_класу {
  var $імя_властивості;
  /*список властивостей*/
  
function імя_метода(){
 /*визначення метода*/
}

/*список методів*/

}

Зразок визначення класу:

<?php 
// Створюємо клас людей 
class Person{ 
 // Метод, який навчає людину PHP 
  function know_php (){ 
    echo "Тепер я знаю PHP"; 
  } 
} 

$Bob = new Person; // створюємо об'єкт 
 // Класу людина 
 $Bob -> know_php (); // навчаємо його PHP 
?> 

Результат виконання цієї частини php-скрипта:

Тепер я знаю PHP

Зразок визначення класу Літаків:

<?php 
// Створюємо клас Літачок 
class Plane{ 

  //визначаємо властивості
  public $silvery_board = 'Сріблястий літачок';
  public $white_board = 'Білий літачок';

 // Метод визначення класу
  function What_the_plane (){ 
    echo ' Клас: '.get_class($this);     
  } 
 
  function turn_on_engine (){ 
    echo 'Завів двигун'; 
  }
  
  function speed_on(){ 
    echo 'Збільшив швидкість'; 
  }
  
  function fly_to_sky(){ 
    echo 'Полетів'; 
  }   
}; 

$A747 = new Plane; 
// властивості обєкту
echo 'Властивість обєкту: '. $A747 -> silvery_board;

// методи обєкту
$A747 -> What_the_plane ();
$A747 -> turn_on_engine ();
$A747 -> speed_on();
$A747 -> fly_to_sky();
?> 

Результат:

Властивість обєкту: Сріблястий літачок
Клас: Plane
Завів двигун
Збільшив швидкість
Полетів

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

Приклад класу



<?php

class First{
    
    
//параметри класу
    //доступний з будь якої точки
    
public $a;
    
    
//доступний з класу власника і наслідників
    
protected $b;
    
    
//доступний лише з класу власника
    
private $c;

    
    
//методи класу
    //конструктор класу викликається при створенні обєкта класу
    
public function  __construct()
    {
        
$this->SetA(1);
    }

    public function 
SetA($in_a)
    {
        
//запис у параметр класу значеня яке було передано при виклику метода
        
$this->$in_a;
    }
     
    public function 
GetA()
    {
        
//виводимо значення параметра класа
        
echo $this->a.'<br />';
    }

    
//деструктор класу виконується при знищенні обєкта класу
    
public function  __destruct()
    {
        echo 
'obj is close';
    }
}

//створюємо екземпляр класу
$test = new First();

//викликаєм метод екземпляру класу
$test->GetA();
// результат 1

$test->SetA(4);
$test->GetA();
//результат 4

?>

Стан об'єкта, поняття областей доступу

Клас складається з параметрів (змінні класу) та методів (функції класу) існує три ідентифікатори доступу до методів та параметрів класу.

Майже кожному члену класа можна встановити модифікатор доступу (за винятком статичних конструкторів та деяких інших речей). У більшості об'єктно-орієнтованих мов програмування підтримуються такі модифікатори доступу:

private (закритий, внутрішній член класу) — звернення до члену допускаються лише з методів того класу, у якому цей член визначений. Будь-які спадкоємці класу вже не зможуть отримати доступ до цього члену. Спадкування за типом private забороняє доступ з дочірнього класу до всіх членів батьківського класу;

protected (захищений, внутрішній член ієрархії класів) — звернення до члена допускаються з методів того класу, у якому цей член визначений, а також з будь-яких методів його класів-спадкоємців. Спадкування за типом protected робить все public-члени батьківського класу protected-членами класу-спадкоємця;

public (відкритий член класу) — звернення до члена допускаються з будь-якого коду.

Методи та параметри класу бувають звичайні та статичні – статичні не прив'язані ні до якого об'єкту класу а до всіх одночасно – доступитись до них можна без створення об'єкта класу

Приклад класу із статичним параметром та методом



<?php

class Second{
    
//оголошення статичного параметра
    
public static $a;
    
    
//оголошення статичного метода
    
public static function SetA($in_a)
    {
        
Second::$a $in_a;
    }
    
    public function 
GetA()
    {
        
//звернення до статичного параметра
        
echo Second::$a.'<br />';
    }
}

//звернення до статичного метода
Second::SetA(5);

$test = new Second();

$test->GetA();
//результат 5

?>

Успадкування (наслідування)

Клас може мати «підкласи», спеціалізовані, розширені версії надкласу. Можуть навіть утворюватись цілі дерева успадкування. Наприклад, клас Собака може мати підкласи Коллі, Пекінес, Вівчарка і т.п. Так, Сірко може бути екземпляром класу Вівчарка. Підкласи успадковують атрибути та поведінку своїх батьківських класів, і можуть вводити свої власні. Успадкування може бути одиничне (один безпосередній батьківський клас) та множинне (кілька батьківських класів). Це залежить від вибору програміста, який реалізовує клас та мови програмування. Так, наприклад, в Java дозволене лише одинарне успадкування, а в С++ і те і інше.

Наслідуються параметри і методи класу з ідентифікаторами доступу public і protected
якщо потрібний батьківські конструктор або деструктор його потрібно викликати у дочірньому класі через parent::
можна переоприділити існуючі параметри та методи батьківського класу а можна і залишити без змін а також можна добавити нові



<?php

//створимо нащадка від класа First
class Third extends First {

    
//переоприділимо конструктор батьківського класу
    
public function  __construct()
    {
        
//викличимо батьківський конструктор
        
parent::__construct();

        
//встановимо значення наступного параметра класу
        
$this->700;
    }

    
//переоприділимо метод
    
public function SetA($in_a)
    {
        
$in_a $in_a 2;

        
//можна взагалі переписати метод але ми змінили дані і передамо їх батьківському методу
        
parent::SetA($in_a);
    }

    
//створимо новий метод
    
public function GetB()
    {
        
//виводимо значення параметра класа
        
echo $this->b.'<br />';
    }
}

//створюємо екземпляр класу
$test = new Third();

//викликаєм метод екземпляру класу
$test->GetA();
$test->GetB();
// результат 2
// результат 700

$test->SetA(4);
$test->GetA();
$test->GetB();
// результат 8
// результат 700

?>

Абстрактні класи – об’єкти цих класів не створюються а використовуються ці класи як основа для наслідування і вже для наслідників можна робити обєкти

Приклад оголошення абстрактного класу



<?php

abstract class NNA{
    
//тіло класу
}

?>



Об'єкт

Об'єкти - тип даних, що прийшов з об'єктно-орієнтованого програмування (ООП).

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

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

Окремий екземпляр класу (створюється після запуску програми і ініціалізації полів класу).

Наприклад, Клас Собака відповідає всім собакам шляхом опису їхніх спільних рис; об'єкт Сірко є одним окремим собакою, окремим варіантом значень характеристик. Собака має хутро; Сірко має коричнево-біле хутро. Об'єкт Сірко є екземпляром (примірником) класу Собака. Сукупність значень атрибутів окремого об'єкта називається станом. На основі класу Собака можна, також, створити інший об'єкт Дружок, який відрізнятиметься від об'єкта Сірко своїм станом (наприклад кольором хутра). Обидва об'єкта (Сірко і Дружок) є екземплярами класу Собака.

У PHP для доступу до методів об'єкта використовується оператор -> .

Для ініціалізації об'єкту використовується вираз new, що створює в змінної екземпляр об'єкта.

Метод

Можливості об'єкта. Оскільки Сірко — Собака, він може гавкати. Тому гавкати() є одним із методів об'єкта Сірко. Він може мати й інші методи, зокрема: місце(), або їсти(). В межах програми, використання методу має впливати лише на один об'єкт; всі Собаки можуть гавкати, але треба щоб гавкав лише один окремий собака.

Приховування інформації (інкапсуляція)

Приховування деталей про роботу класів від об'єктів, що їх використовують або надсилають їм повідомлення.

Так, наприклад, клас Собака має метод гавкати(). Реалізація цього методу описує як саме повинно відбуватись гавкання (приміром, спочатку вдихнути() а потім видихнути() на обраній частоті та гучності). Петро, хазяїн пса Сірка, не повинен знати як він гавкає. Інкапсуляція досягається шляхом вказування, які класи можуть звертатися до членів об'єкта. Як наслідок, кожен об'єкт представляє кожному іншому класу певний інтерфейс — члени, доступні іншим класам. Інкапсуляція потрібна для того, аби запобігти використанню користувачами інтерфейсу тих частин реалізації, які, швидше за все, будуть змінюватись. Це дозволить полегшити внесення змін, тобто, без потреби змінювати і користувачів інтерфейсу. Наприклад, інтерфейс може гарантувати, що щенята можуть додаватись лише до об'єктів класу Собака кодом самого класу. Часто, члени класу позначаються як публічні (англ. public), захищені (англ. protected) та приватні (англ. private), визначаючи, чи доступні вони всім класам, підкласам, або лише до класу в якому їх визначено. Деякі мови програмування йдуть ще далі: Java використовує ключове слово private для обмеження доступу, що буде дозволений лише з методів того самого класу, protected — лише з методів того самого класу і його нащадків та з класів із того ж самого пакету, C# та VB.NET відкривають деякі члени лише для класів із тієї ж збірки шляхом використання ключового слова internal (C#) або Friend (VB.NET), а Eiffel дозволяє вказувати які класи мають доступ до будь-яких членів.



Корисне

Як позначаються коментарі в php?

<?php 
// це однорядковий коментар
# і це також однорядковий коментар
/*
 а ось це вже багаторядковий коментар
*/
?>