Концепция за обектно-ориентирано програмиране (ООП) в PHP с пример

⚡ Умно обобщение

Обектно-ориентираното програмиране в PHP моделира приложение около обекти от реалния свят, използвайки класове и обекти. Това ръководство обяснява принципите на ООП за капсулиране, наследяване и полиморфизъм, как PHP ги поддържа и изгражда примери за работни класове, наследяване и интерфейси стъпка по стъпка.

  • 🧱 Класове и обекти: Класът дефинира свойствата и методите на реално съществуващ обект, а обектът е единичен екземпляр на този клас.
  • 🔒 Капсулирането: Частните променливи с публични методи get и set скриват вътрешни детайли и защитават състоянието на обекта.
  • 👪 наследство: Ключовата дума extends позволява на дъщерен клас да използва повторно методите на родителски клас, намалявайки дублирания код.
  • 🔁 полиморфизъм: Интерфейсът дефинира стандартни методи, които много класове имплементират по различен начин зад една унифицирана конзола.tract.
  • 📐 UML диаграма на класовете: Диаграмата на класовете показва името на класа, променливите и методите, като плюс, минус и хеш маркират публичния, частния и защитения обхват.
  • 🧩 Интерфейси и Abstract: Коремни мускулиtracКласът t споделя общ код, докато интерфейсът гарантира, че всеки клас драйвери предоставя едни и същи методи.
  • 🤖 AI Assist: Инструментите с изкуствен интелект могат да генерират PHP клас от описание и да рефакторират процедурен код в чист обектно-ориентиран код.

PHP обектно-ориентирано програмиране

Какво е OOPs?

Обектно-ориентираното програмиране е подход към разработката на софтуер, който моделира приложение около обекти от реалния свят, като служители, автомобили и банкови сметки. Класът дефинира свойствата и методите на обект от реалния свят. Обектът е екземпляр на клас.

Трите основни компонента на обектната ориентация са:

  • Обектно ориентиран анализ – функционалност на системата
  • Обектно-ориентиран дизайн – архитектура на системата
  • Обектно ориентирано програмиране – реализация на приложението

Принципи на обектно ориентираното програмиране

Трите основни принципа на обектно-ориентирано програмиране (ООП) са:

  • Капсулирането – това се отнася до скриване на детайлите на имплементацията и разкриване само на методите. Основните цели на капсулирането са:
    • Намалете сложността на разработката на софтуер – като скриете подробностите за внедряването и изложите само операциите, използването на клас става лесно.
    • Защита на вътрешното състояние на обекта – достъпът до променливите на класа се осъществява чрез методи като get и set. Това прави класа гъвкав и лесен за поддръжка.
    • Позволете промяна на вътрешната имплементация на класа, без да се притеснявате за нарушаване на кода, който използва класа.
  • наследяване – това се отнася до връзката между класовете. Връзката е под формата на родител и дете. Детето използва методите, дефинирани в родителския клас. Основната цел на наследяването е:
    • Възможност за повторно използване – няколко деца могат да наследят от един и същ родител. Това е много полезно, когато трябва да осигурим обща функционалност, като например добавяне, актуализиране и изтриване на данни от базата данни.
  • полиморфизъм – това се отнася до наличието на единен интерфейс с много различни реализации. Основната цел на полиморфизма е:
    • За да се опрости поддръжката на приложенията и да се направят по-разширяемите.

ООП Concepts в PHP

PHP е обектно-ориентиран скриптов език; той поддържа всички гореспоменати принципи. Горните принципи се постигат чрез:

  • Капсулирането – чрез използването на методи „get“ и „set“ и модификатори за достъп.
  • наследяване – чрез използването на ключовата дума extends
  • полиморфизъм – чрез използването на ключовата дума implements

Сега, когато имаме основни познания за ООП и как се поддържа в PHP, нека разгледаме примери, които прилагат горните принципи.

Какво е UML?

Унифицираният език за моделиране (UML) е техника, използвана за проектиране и документиране на обектно-ориентирани системи.

UML създава редица документи, но ние ще разгледаме диаграмата на класовете, която е много важна за обектно-ориентираното PHP програмиране.

Пример за диаграма на клас

ООП Concepts в PHP

Ключ на диаграма на клас

  • - горна кутия съдържа името на класа
  • - средна кутия съдържа променливите на класа
  • - долна кутия съдържа методите на класа
  • - минус (-) знакът означава частен обхват
  • - плюс (+) знак означава публичен обхват
  • - хеш (#) знак означава защитен обхват

Как да създадете клас в PHP

Ключовата дума class се използва за дефиниране на клас в PHP. По-долу са правилата за създаване на клас в PHP.

  • Името на класа трябва да започва с буква
  • Името на класа не може да бъде PHP запазена дума
  • Името на класа не може да съдържа интервали

Да кажем, че искаме да създадем клас за представяне на животни. Ще започнем с идентифициране на характеристиките, които са общи за всички животни.

  • Всички животни принадлежат към семейство, като например тревопасни, месоядни и др.
  • Всички животни ядат храна

Диаграмата по-долу показва класовата диаграма за животното.

Създайте клас в PHP

Нека сега кодираме нашия клас Animal.

<?php
class Animal
{
    private $family;
    private $food;
    public function __construct($family, $food)
    {
        $this->family = $family;
        $this->food = $food;
    }
    public function get_family()
    {
        return $this->family;
    }
    public function set_family($family)
    {
        $this->family = $family;
    }
    public function get_food()
    {
        return $this->food;
    }
    public function set_food($food)
    {
        $this->food = $food;
    }
}
?>

ТУК,

  • „private $family, $food“ означава, че променливите не могат да бъдат достъпни директно извън класа (капсулиране).
  • „public function __construct($family…)“ е методът-конструктор на PHP. Тази функция се извиква всеки път, когато се създава екземпляр на класа. В този случай задаваме семейството и храната.
  • „Публична функция get…()“ е методът, използван за достъп до стойността на семейството или храната (капсулиране)
  • „public function set…()“ е методът, използван за задаване на стойността на семейството или храната (капсулиране)

Как да имплементираме наследяване в PHP

Ще работим с крава и лъв. И кравата, и лъвът наследяват от класа Животни.

Класовата диаграма по-долу показва връзките.

прилагане на наследяване в PHP

Обърнете внимание, че кравата наследява от класа Animal и също така дефинира своя собствена променлива и методи.

Нека сега кодираме класа Cow.

<?php
class Cow extends Animal
{
    private $owner;
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
    public function set_owner($owner)
    {
        $this->owner = $owner;
    }
    public function get_owner()
    {
        return $this->owner;
    }
}
?>

Нека сега кодираме класа Lion.

<?php
class Lion extends Animal
{
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
}
?>

ТУК,

  • „клас … разширява Animal“ кара класовете Cow и Lion да използват методи от класа Animal (наследяване).

Как да създадем обект от класа

Всички класове Animal, Cow и Lion трябва да са в една и съща директория за по-голяма простота.

Нека сега създадем приложението, което използва нашите класове.

Пример за PHP клас

<?php
require 'Animal.php';
require 'Cow.php';
require 'Lion.php';
$cow = new Cow('Herbivore', 'Grass');
$lion = new Lion('Carnivore', 'Meat');
echo '<b>Cow Object</b> <br>';
echo 'The Cow belongs to the ' . $cow->get_family() . ' family and eats ' . $cow->get_food() . '<br><br>';
echo '<b>Lion Object</b> <br>';
echo 'The Lion belongs to the ' . $lion->get_family() . ' family and eats ' . $lion->get_food();
?>

Тестваме нашето приложение

Нека сега разгледаме нашето приложение в уеб браузър.

Наследяване в PHP

И двата обекта използват повторно методите get_family и get_food, наследени от класа Animal, което демонстрира наследяването в действие.

Как да имплементираме полиморфизъм в PHP

Да кажем, че искаме да разработим приложение, което се свързва с различни системи за бази данни, като например MySQL намлява SQL Сървър, но използва един и същ унифициран интерфейс. Можем да създадем интерфейс, който дефинира стандартните методи и abstract клас, който реализира общите методи.

  • Interface – подобно е на клас. Той само дефинира методите и параметрите.
  • Коремни мускулиtracТ-клас – това е клас, който не може да се използва за директно създаване на обект. Неговата цел е да предостави частични или пълни реализации на общи методи.

Диаграмата на класовете по-долу илюстрира връзката между нашите коремни мускулиtract клас, интерфейс и класове за имплементация.

Наследяване в PHP

Нека сега да си направим коремните мускулиtracт клас.

<?php
abstract class DBCommonMethods
{
    private $host;
    private $db;
    private $uid;
    private $password;
    public function __construct($host, $db, $uid, $password)
    {
        $this->host = $host;
        $this->db = $db;
        $this->uid = $uid;
        $this->password = $password;
    }
}
?>

ТУК,

  • коремни мускулиtrac„t клас“ означава, че класът не може да се използва директно за създаване на обект
  • „$host, $db…“ са класови променливи, общи за всички реализации
  • „function __construct(…)“ е методът-конструктор на класа, който задава стойностите на общите променливи при инициализацията

Нека сега създадем интерфейса, който съдържа стандартните методи, които ще бъдат имплементирани по различен начин в зависимост от използваната база данни.

<?php
interface DBInterface
{
    public function db_connect();
    public function insert($data);
    public function read($where);
    public function update($where);
    public function delete($where);
}
?>

ТУК,

  • „интерфейс“ е ключовата дума за създаване на интерфейси
  • „обществена функция…(…)“ са стандартните методи, които трябва да бъдат приложени

Нека сега създадем конкретните класове, които ще разширят класа DBCommonMethods и ще имплементират интерфейса DBInterface. Първо, MySQLDriver.php:

<?php
class MySQLDriver extends DBCommonMethods implements DBInterface
{
    public function __construct($host, $db, $uid, $password)
    {
        parent::__construct($host, $db, $uid, $password);
    }
    public function db_connect() { /* connect code goes here */ }
    public function delete($where) { /* delete code goes here */ }
    public function insert($data)  { /* insert code goes here */ }
    public function read($where)   { /* read code goes here */ }
    public function update($where) { /* update code goes here */ }
}
?>

След това, MSSQLServerDriver.php:

<?php
class MSSQLServerDriver extends DBCommonMethods implements DBInterface
{
    public function __construct($host, $db, $uid, $password)
    {
        parent::__construct($host, $db, $uid, $password);
    }
    public function db_connect() { /* connect code goes here */ }
    public function delete($where) { /* delete code goes here */ }
    public function insert($data)  { /* insert code goes here */ }
    public function read($where)   { /* read code goes here */ }
    public function update($where) { /* update code goes here */ }
}
?>

ТУК,

  • „клас … разширява DBCommonMethods“ използва методите в DBCommonMethods
  • „… implements DBInterface“ гарантира, че класът предоставя стандартните методи, независимо от използвания драйвер на базата данни.

Кодът, използващ горните класове, би изглеждал така:

<?php $db = new MySQLDriver($host, $db, $uid, $password); ?>

Или:

<?php $db = new MSSQLServerDriver($host, $db, $uid, $password); ?>

Останалата част от кода ще бъде еднаква и за двата драйвера, като например:

<?php
$db->db_connect();
$db->insert($data);
?>

Това е полиморфизъм в действие: същите извиквания на методи работят върху всеки драйвер, който имплементира интерфейса, така че околният код никога не се променя, когато сменяте двигателите на базата данни.

Въпроси и Отговори

Коремни мускулиtracКласът t може да съдържа както имплементирани методи, така и свойства, а един клас разширява само един. Интерфейсът декларира само сигнатури на методи, а един клас може да имплементира много. Използвайте abstract клас за споделяне на код, интерфейс за налагане на contract.

Четирите стълба са капсулиране, наследяване, полиморфизъм и abstracция. Този урок се фокусира върху първите три; коремни мускулиtracцията крие сложни детайли зад опростен интерфейс, който PHP поддържа с abstract класове и интерфейси.

Публичните членове са достъпни отвсякъде, частните членове - само в рамките на същия клас, а защитените членове - в рамките на класа и неговите подкласове. Те налагат капсулиране, като контролират кой може да чете или променя всяко свойство или метод.

Да. Дайте на ИИ полетата или дефиницията на таблица и той може да създаде клас с типизирани свойства, конструктор и методи за get и set. RevПрегледайте типовете и добавете валидация, преди да използвате класа.

Да. Поставете процедурния скрипт и изкуственият интелект може да групира свързани функции и данни в класове, да приложи капсулиране и да предложи наследяване или интерфейси. Тествайте рефакторирания код, тъй като поведението трябва да остане идентично.

Обобщете тази публикация с: