PHP Object Oriented Programming (OOPs)-concept Tutorial met voorbeeld
Wat zijn OOP's?
Object Oriented is een benadering van softwareontwikkeling die toepassingen modelleert rond objecten uit de echte wereld, zoals werknemers, auto's, bankrekeningen, enz. Een klasse definieert de eigenschappen en methoden van een object uit de echte wereld. Een object is een instance van een klasse.
De drie basiscomponenten van objectoriëntatie zijn;
- Objectgeoriënteerde analyse – functionaliteit van het systeem
- Objectgeoriënteerd ontwerpen – 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 alleen het blootstellen van de methoden. Het hoofddoel van encapsulatie is om;
- 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 vindt plaats via methoden zoals get en set, dit maakt de klasse flexibel en gemakkelijk te onderhouden.
- De interne implementatie van de klasse kan worden gewijzigd zonder dat u zich zorgen hoeft te maken over het breken van de code die de klasse gebruikt.
- Erfenis – dit gaat over de relatie tussen klassen. De relatie neemt de vorm aan van een ouder en kind. Het kind gebruikt de methoden die in de bovenliggende klasse zijn gedefinieerd. Het belangrijkste doel van overerving is;
- Herbruikbaarheid – een aantal kinderen kan erven van dezelfde ouder. Dit is erg handig als we gemeenschappelijke functionaliteit moeten bieden, zoals het toevoegen, bijwerken en verwijderen van gegevens uit de database.
- polymorfisme – het gaat hier om één enkele vorm, maar om veel verschillende implementatiewijzen. Het belangrijkste doel van polymorfisme is;
- Vereenvoudig het onderhoud van applicaties en maak ze beter uitbreidbaar.
OOP's Concepts in PHP
PHP is een objectgeoriënteerde scripttaal; het ondersteunt alle bovengenoemde principes. Bovenstaande principes worden bereikt via;
- Inkapseling – via het gebruik van “get”- en “set”-methoden enz.
- Erfenis – via het gebruik van het trefwoord Extend
- polymorfisme – via het gebruik van werktuigen trefwoord
Nu we de basiskennis hebben van OOP en hoe het wordt ondersteund PHPLaten we eens kijken naar voorbeelden die de bovenstaande principes implementeren
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 programmeren in PHP.
Voorbeeld van klassediagram
Klassediagramsleutel
- De Bovenste doos bevat de klassenaam
- De middelste doos bevat de klassevariabelen
- De onderste doos bevat de klassenmethoden
- De min (-) teken betekent: privé reikwijdte
- 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
Laten we zeggen dat we een klasse willen maken voor het vertegenwoordigen van dieren.
We beginnen met het identificeren van de kenmerken die alle dieren gemeen hebben.
- Alle dieren behoren tot een familie zoals een herbivoor, carnaval, etc.
- Alle dieren eten voedsel
Het onderstaande diagram toont het diagram voor het dier
Laten we nu onze dierenklasse coderen
<?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 direct toegankelijk zijn buiten de klasse (Encapsulation).
- “public function __construct($family…)” is de php-constructormethode. Deze functie wordt aangeroepen wanneer een instantie van de klasse is gemaakt. In dit geval bepalen we het gezin en het eten.
- “public function get…()” is de methode die wordt gebruikt om toegang te krijgen tot de familie- of voedselwaarde (inkapseling)
- “public function set…()” is de methode die wordt gebruikt om de gezins- of voedselwaarde in te stellen (Encapsulation)
Hoe Overerving implementeren 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.
Merk op dat de koe erft van de dierklasse en ook haar eigen variabele en methoden definieert.
Laten we nu de klasse Cow coderen
<?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 klasse Lion coderen
<?php class Lion extends Animal { public function __construct($family, $food) { parent::__construct($family, $food); } } ?>
HIER,
- “class … extends Animal” zorgt ervoor dat de koe en de leeuw methoden uit de Animal-klasse (Overerving) gebruiken.
Hoe u een object van de klasse maakt
Voor de eenvoud moeten de klassen Animal, Cow en Lion zich allemaal in dezelfde map bevinden.
Laten we nu de applicatie maken die onze klassen gebruikt.
PHP-klasse voorbeeld
<?php require 'Animal.php'; require 'Cow.php'; require 'Lion.php'; $cow = new Cow('Herbivore', 'Grass'); $lion = new Lion('Canirval', '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 nu onze applicatie in een webbrowser bekijken
Fantastisch toch! Laten we nu eens kijken naar het derde principe van OOP, polymorfisme.
Laten we zeggen dat we een applicatie willen ontwikkelen die verbinding maakt met verschillende database-engines, zoals MySQL en SQL Server maar gebruik dezelfde uniforme interface.
We kunnen een interface maken die de standaardmethoden definieert en een abstracte klasse die de algemene methoden implementeert.
- Interface – het is vergelijkbaar met een klasse. Het definieert alleen de methoden en parameters.
- Abstracte 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 abstracte klasse-, interface- en implementatieklassen.
Laten we nu onze abstracte klasse maken
<?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,
- “abstracte klasse” betekent dat de klasse niet rechtstreeks kan worden gebruikt om in php een object te maken
- “$host,$db...” zijn klassevariabelen die voor alle implementaties gelden
- “function __construct(…)” is de php-klasseconstructormethode die de waarden van de algemene variabelen instelt bij initialisatie
Laten we nu de interface maken die de standaardmethoden bevat die verschillend zullen worden geïmplementeerd, afhankelijk van de database-engine.
<?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 en de DBInterface-interface uitbreiden. MySQLStuurprogramma.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 } } ?>
HIER,
- “class … extends DBCommonMethods” gebruikt de methoden in de DBCommonMethods
- “… implementeert DBInterface” zorgt ervoor dat de klasse standaardmethoden biedt, ongeacht het gebruikte databasestuurprogramma.
Gebruik van de bovenstaande code De code die de bovenstaande klasse gebruikt, zou er als volgt uitzien
<?php $db = new MySQLDriver($host,$db,$uid,$password); ?>
Or
<?php $db = new MSSQLServerDriver ($host,$db,$uid,$password); ?>
De rest van de code zou voor beide stuurprogramma's hetzelfde zijn, zoals;
<?php $db->db_connect(); $db->insert($data); ?>
Samenvatting
- Object Oriented Programming OOP is een krachtige techniek die applicaties modelleert naar objecten uit de echte wereld
- Een klasse is een weergave van objecten uit de echte wereld met eigenschappen en methoden
- De drie basisprincipes van OOP zijn;
- Inkapseling
- Erfenis
- polymorfisme