Het concept van objectgeoriënteerd programmeren (OOP) in PHP met een voorbeeld.

⚡ Slimme samenvatting

Objectgeoriënteerd programmeren in PHP modelleert een applicatie rondom objecten uit de echte wereld met behulp van klassen en objecten. Deze handleiding legt de OOP-principes van inkapseling, overerving en polymorfisme uit, hoe PHP deze ondersteunt en bouwt stap voor stap werkende voorbeelden van klassen, overerving en interfaces.

  • 🧱 Klassen en objecten: Een klasse definieert de eigenschappen en methoden van iets uit de echte wereld, en een object is een enkel exemplaar van die klasse.
  • 🔒 inkapseling: Privévariabelen met openbare get- en set-methoden verbergen interne details en beschermen de status van een object.
  • 👪 Erfenis: Het sleutelwoord `extends` zorgt ervoor dat een afgeleide klasse de methoden van een bovenliggende klasse kan hergebruiken, waardoor dubbele code wordt verminderd.
  • 🔁 Polymorfisme: Een interface definieert standaardmethoden die door veel klassen op verschillende manieren worden geïmplementeerd, achter één uniforme interface.tract.
  • 📐 UML-klassendiagram: Een klassendiagram toont de klassenaam, variabelen en methoden, waarbij plus-, min- en hekjes respectievelijk het publieke, private en protected bereik aangeven.
  • 🧩 Interfaces en Abstract: Een buiktracEen t-klasse deelt gemeenschappelijke code, terwijl een interface garandeert dat elke driverklasse dezelfde methoden biedt.
  • 🤖 AI-assistentie: AI-tools kunnen een PHP-klasse genereren op basis van een beschrijving en procedurele code omzetten in overzichtelijke objectgeoriënteerde code.

PHP Objectgeoriënteerd programmeren

Wat zijn OOP's?

Objectgeoriënteerd programmeren is een benadering van softwareontwikkeling waarbij een applicatie wordt gemodelleerd naar objecten uit de echte wereld, zoals werknemers, auto's en bankrekeningen. Een klasse definieert de eigenschappen en methoden van een object uit de echte wereld. Een object is een instantie van een klasse.

De drie basiscomponenten van objectoriëntatie zijn:

  • Objectgeoriënteerde analyse – functionaliteit van het systeem
  • Objectgeoriënteerd ontwerp – architectuur van het systeem
  • Objectgeoriënteerd programmeren – implementatie van de applicatie

Objectgeoriënteerde programmeerprincipes

De drie belangrijkste principes van OOP zijn:

  • Inkapseling – Dit betreft het verbergen van de implementatiedetails en het alleen tonen van de methoden. De belangrijkste doelen van encapsulatie zijn:
    • Verminder de complexiteit van softwareontwikkeling: door de implementatiedetails te verbergen en alleen de bewerkingen bloot te leggen, wordt het gebruik van een klasse eenvoudig.
    • Bescherm de interne status van een object – toegang tot de klassevariabelen verloopt via methoden zoals `get` en `set`. Dit maakt de klasse flexibel en gemakkelijk te onderhouden.
    • Sta toe dat de interne implementatie van de klasse kan worden gewijzigd zonder dat dit gevolgen heeft voor de code die de klasse gebruikt.
  • Erfenis – Dit betreft de relatie tussen klassen. De relatie neemt de vorm aan van een ouder en een kind. Het kind gebruikt de methoden die in de ouderklasse zijn gedefinieerd. Het belangrijkste doel van overerving is:
    • Herbruikbaarheid – meerdere subklassen kunnen van dezelfde ouderklasse erven. Dit is erg handig wanneer we gemeenschappelijke functionaliteit moeten bieden, zoals het toevoegen, bijwerken en verwijderen van gegevens uit de database.
  • polymorfisme – Dit betreft het hebben van één interface met veel verschillende implementaties. Het belangrijkste doel van polymorfisme is:
    • Om het onderhoud van applicaties te vereenvoudigen en ze beter uitbreidbaar te maken.

OOP's Concepts in PHP

PHP is een objectgeoriënteerde scripttaal; het ondersteunt alle bovengenoemde principes. Deze principes worden bereikt door:

  • Inkapseling – door gebruik te maken van de methoden "get" en "set", en toegangsmodifiers.
  • Erfenis – door gebruik te maken van het trefwoord extends
  • polymorfisme – door gebruik te maken van het trefwoord 'implements'

Nu we de basiskennis hebben van OOP en hoe het wordt ondersteund PHPLaten we eens kijken naar voorbeelden die de bovenstaande principes in de praktijk brengen.

Wat is UML?

Unified Modeling Language (UML) is een techniek die wordt gebruikt voor het ontwerpen en documenteren van objectgeoriënteerde systemen.

UML produceert een aantal documenten, maar we zullen kijken naar het klassendiagram, dat erg belangrijk is voor objectgeoriënteerd PHP-programmeren.

Voorbeeld van klassediagram

OOP's Concepts in PHP

Klassediagramsleutel

  • De bovenste doos bevat de klassenaam
  • De middelste doos bevat de klassevariabelen
  • De onderste doos bevat de klassenmethoden
  • De min (-) teken betekent privébereik
  • De meer (+) teken betekent publieke reikwijdte
  • De hekje (#) teken betekent beschermde reikwijdte

Hoe maak je een klasse in PHP

Het class trefwoord wordt gebruikt om een ​​klasse in PHP te definiëren. Hieronder staan ​​de regels voor het maken van een klasse in PHP.

  • De klassenaam moet beginnen met een letter
  • De klassenaam mag geen gereserveerd PHP-woord zijn
  • De klassenaam mag geen spaties bevatten

Stel, we willen een klasse creëren om dieren te representeren. We beginnen met het identificeren van de kenmerken die alle dieren gemeen hebben.

  • Alle dieren behoren tot een familie, zoals herbivoren, carnivoren, enzovoort.
  • Alle dieren eten voedsel

Onderstaande afbeelding toont het klassendiagram voor het dier.

Maak een klasse in PHP

Laten we nu onze Animal-klasse programmeren.

<?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;
    }
}
?>

HIER,

  • “private $family, $food” betekent dat de variabelen niet rechtstreeks buiten de klasse toegankelijk zijn (encapsulatie).
  • “public function __construct($family…)” is de PHP-constructormethode. Deze functie wordt aangeroepen wanneer een instantie van de klasse wordt aangemaakt. In dit geval stellen we de familie en het eten in.
  • “public function get…()” is de methode die gebruikt wordt om toegang te krijgen tot de familie- of voedingswaarde (encapsulatie).
  • “public function set…()” is de methode die gebruikt wordt om de familie- of voedingswaarde (encapsulatie) in te stellen.

Hoe implementeer je overerving in PHP?

We gaan werken met een koe en een leeuw. Zowel de koe als de leeuw erven van de klasse Dieren.

In onderstaand klassendiagram zijn de relaties weergegeven.

Implementeer overerving in PHP

Merk op dat de koe overerft van de klasse Animal en ook haar eigen variabelen en methoden definieert.

Laten we nu de Cow-klasse programmeren.

<?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;
    }
}
?>

Laten we nu de Lion-klasse programmeren.

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

HIER,

  • “class … extends Animal” zorgt ervoor dat de klassen Cow en Lion methoden van de klasse Animal kunnen gebruiken (overerving).

Hoe maak je een object van de klasse aan?

Voor de eenvoud moeten de klassen Animal, Cow en Lion zich allemaal in dezelfde map bevinden.

Laten we nu de applicatie maken die gebruikmaakt van onze klassen.

PHP-klasse voorbeeld

<?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();
?>

Onze applicatie testen

Laten we onze applicatie nu eens bekijken in een webbrowser.

Overerving in PHP

Beide objecten hergebruiken de get_family- en get_food-methoden die zijn overgeërfd van de Animal-klasse, wat overerving in de praktijk illustreert.

Hoe implementeer je polymorfisme in PHP?

Stel, we willen een applicatie ontwikkelen die verbinding maakt met verschillende database-engines, zoals... MySQL en SQL De server gebruikt echter dezelfde uniforme interface. We kunnen een interface maken die de standaardmethoden en een absolute waarde definieert.tract klasse die de gemeenschappelijke methoden implementeert.

  • Interface – het is vergelijkbaar met een klasse. Het definieert alleen de methoden en parameters.
  • Abstract-klasse – het is een klasse die niet kan worden gebruikt om rechtstreeks een object te maken. Het doel is om gedeeltelijke of volledige implementaties van veelgebruikte methoden te bieden.

Het onderstaande klassendiagram illustreert de relatie tussen onze abstract klasse-, interface- en implementatieklassen.

Overerving in PHP

Laten we nu onze buikspieren trainen.tract-klasse.

<?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;
    }
}
?>

HIER,

  • “buikspierentrac"t class" betekent dat de klasse niet rechtstreeks gebruikt kan worden om een ​​object te creëren.
  • “$host, $db…” zijn klassevariabelen die in alle implementaties voorkomen.
  • “function __construct(…)” is de constructormethode van de klasse die de waarden van de gemeenschappelijke variabelen instelt bij de initialisatie.

Laten we nu de interface maken die de standaardmethoden bevat. Deze methoden zullen, afhankelijk van de database-engine, op verschillende manieren worden geïmplementeerd.

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

HIER,

  • “interface” is het sleutelwoord voor het maken van interfaces
  • “publieke functie…(…)” zijn de standaardmethoden die moeten worden geïmplementeerd

Laten we nu de concrete klassen maken die de klasse DBCommonMethods zullen uitbreiden en de interface DBInterface zullen implementeren. Eerst, 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 */ }
}
?>

Vervolgens, 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 */ }
}
?>

HIER,

  • “klasse … breidt DBCommonMethods uit” gebruikt de methoden in DBCommonMethods
  • “… implementeert DBInterface” zorgt ervoor dat de klasse de standaardmethoden biedt, ongeacht de gebruikte database-driver.

De code die gebruikmaakt van de bovenstaande klassen zou er als volgt uitzien:

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

Of:

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

De rest van de code zou voor beide stuurprogramma's hetzelfde zijn, bijvoorbeeld:

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

Dit is polymorfisme in actie: dezelfde methodeaanroepen werken op elke driver die de interface implementeert, waardoor de omringende code nooit verandert wanneer je van database-engine wisselt.

Veelgestelde vragen

Een buiktracEen klasse kan zowel geïmplementeerde methoden als eigenschappen bevatten, en een klasse erft slechts van één. Een interface declareert alleen methodesignaturen, terwijl een klasse er veel kan implementeren. Gebruik een abstraceen klasse om code te delen, een interface om een ​​bepaalde con af te dwingentract.

De vier pijlers zijn inkapseling, overerving, polymorfisme en abstractie. Deze handleiding richt zich op de eerste drie; abstracEen eenvoudige interface verbergt complexe details, iets wat PHP uitstekend ondersteunt.tract klassen en interfaces.

Openbare leden zijn overal toegankelijk, privéleden alleen binnen dezelfde klasse en beveiligde leden alleen binnen de klasse en de subklassen ervan. Ze zorgen voor inkapseling door te bepalen wie elke eigenschap of methode kan lezen of wijzigen.

Ja. Geef de AI de velden of een tabeldefinitie, en die kan een klasse genereren met getypte eigenschappen, een constructor en get- en set-methoden. RevBekijk de gegevenstypen en voeg validatie toe voordat je de klasse gebruikt.

Ja. Plak het procedurele script erin en de AI kan gerelateerde functies en gegevens groeperen in klassen, inkapseling toepassen en suggesties doen voor overerving of interfaces. Test de herwerkte code, want het gedrag zou identiek moeten blijven.

Vat dit bericht samen met: