PHP Object Oriented Programming (OOPs) koncept Tutorial med eksempel

Hvad er OOPs?

Objektorienteret er en tilgang til softwareudvikling, der modellerer applikationer omkring objekter fra den virkelige verden, såsom medarbejdere, biler, bankkonti osv. En klasse definerer egenskaberne og metoderne for et objekt i den virkelige verden. Et objekt er en forekomst af en klasse.

De tre grundlæggende komponenter i objektorientering er;

  • Objektorienteret analyse – systemets funktionalitet
  • Objektorienteret design – systemets arkitektur
  • Objektorienteret programmering – implementering af applikationen

Objektorienterede programmeringsprincipper

De tre hovedprincipper i OOP er;

  • Indkapsling – det drejer sig om at skjule implementeringsdetaljerne og kun afsløre metoderne. Hovedformålet med indkapsling er at;
  • Reducer softwareudviklingens kompleksitet – ved at skjule implementeringsdetaljerne og kun afsløre operationerne bliver det nemt at bruge en klasse.
  • Beskyt den interne tilstand af et objekt – adgang til klassevariablerne sker via metoder som get og set, dette gør klassen fleksibel og nem at vedligeholde.
  • Den interne implementering af klassen kan ændres uden at bekymre dig om at bryde koden, der bruger klassen.
  • Arv – det drejer sig om forholdet mellem klasser. Relationen tager form af en forælder og et barn. Barnet bruger de metoder, der er defineret i den overordnede klasse. Hovedformålet med arv er;
  • Genanvendelighed – et antal børn, kan arve fra samme forælder. Dette er meget nyttigt, når vi skal levere fælles funktionalitet såsom tilføjelse, opdatering og sletning af data fra databasen.
  • polymorfi – det handler om at have en enkelt form, men mange forskellige implementeringsmåder. Hovedformålet med polymorfi er;
  • Gør det nemmere at vedligeholde applikationer og gøre dem mere udvidelige.

OOP'er Concepts i PHP

PHP er et objektorienteret scriptsprog; den understøtter alle ovenstående principper. Ovenstående principper opnås via;

  • Indkapsling – via brug af “get” og “set” metoder mv.
  • Arv – via brugen af ​​extends søgeord
  • polymorfi – via brug af implements nøgleord

Nu hvor vi har den grundlæggende viden om OOP og hvordan det understøttes i PHP, lad os se på eksempler, der implementerer ovenstående principper

Hvad er UML?

Unified Modeling Language UML er en teknik, der bruges til at designe og dokumentere objektorienterede systemer.

UML producerer en række dokumenter, men vi vil se på klassediagrammet, som er meget vigtigt for objektorienteret php-programmering.

Eksempel på klassediagram

OOP'er Concepts i PHP

Klassediagramnøgle

  • Øverste kasse indeholder klassenavnet
  • mellemkasse indeholder klassevariablerne
  • nederste boks indeholder klassemetoderne
  • minus (-) tegn betyder privat omfang
  • mere (+) tegn betyder offentligt omfang
  • hash (#) skilt betyder beskyttet omfang

Sådan opretter du en klasse i PHP

Klasse nøgleordet bruges til at definere en klasse i PHP. Nedenfor er reglerne for oprettelse af en klasse i PHP.

  • Klassens navn skal starte med et bogstav
  • Klassenavnet kan ikke være et PHP-reserveret ord
  • Klassenavnet må ikke indeholde mellemrum

Lad os sige, at vi vil skabe en klasse til at repræsentere dyr.

Vi vil starte med at identificere de træk, der er fælles for alle dyr.

  • Alle dyr tilhører en familie såsom en planteæder, karneval osv.
  • Alle dyr spiser mad

Diagrammet nedenfor viser diagrammet for dyret

Opret en klasse i PHP

Lad os nu kode vores dyreklasse

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

HER,

  • "privat $familie, $mad" betyder, at variablerne ikke kan tilgås direkte uden for klassen (Encapsulation).
  • "public function __construct($family...)" er php-konstruktørmetoden. Denne funktion kaldes hver gang en forekomst af klassen er blevet oprettet. I dette tilfælde sætter vi familien og maden.
  • "offentlig funktion få...()" er den metode, der bruges til at få adgang til familie- eller fødevareværdien (Encapsulation)
  • "offentlig funktionssæt...()" er den metode, der bruges til at indstille familie- eller fødevareværdien (Encapsulation)

Hvordan implementerer arv i PHP

Vi vil arbejde med en ko og en løve. Både koen og løven arver fra Dyreklassen.

Klassediagrammet nedenfor viser sammenhængene.

implementere arv i PHP

Bemærk koen arver fra dyreklassen og definerer også sin egen variabel og metoder.

Lad os nu kode Cow-klassen

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

Lad os nu kode Lion-klassen

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

HER,

  • "klasse ... udvider Animal" får koen og løven til at bruge metoder fra dyreklassen (Arv).

Sådan opretter du klassens objekt

Dyr-, ko- og løveklasserne bør alle være i den samme mappe for enkelhedens skyld.

Lad os nu oprette applikationen, der bruger vores klasser.

PHP klasse eksempel

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

Tester vores applikation

Lad os nu se vores applikation i en webbrowser

Arv i PHP

Fantastisk rigtigt! Lad os nu se på det tredje princip i OOP, polymorfi.

Lad os sige, at vi vil udvikle en applikation, der forbinder til forskellige databasemotorer som f.eks MySQL og SQL Server, men brug den samme ensartede grænseflade.

Vi kan skabe en grænseflade, der definerer standardmetoderne, og en abstrakt klasse, der implementerer de gængse metoder.

  • grænseflade – det ligner en klasse. Den definerer kun metoderne og parametrene.
  • Abstrakt klasse – det er en klasse, der ikke kan bruges til at oprette et objekt direkte. Dens formål er at levere delvise eller hele implementeringer af almindelige metoder.

Klassediagrammet nedenfor illustrerer forholdet mellem vores abstrakte klasse, grænseflade og implementeringsklasser.

Arv i PHP

Lad os nu skabe vores abstrakte 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;
    }
}
?>

HER,

  • "abstrakt klasse" betyder, at klassen ikke kan bruges direkte til at oprette et php-objekt
  • "$host,$db..." er klassevariabler, der er fælles for alle implementeringer
  • "funktion __construct(...)" er php-klassekonstruktørmetoden, der sætter de fælles variable værdier ved initialisering

Lad os nu skabe den grænseflade, der indeholder standardmetoderne, som vil blive implementeret forskelligt afhængigt af databasemotoren.

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

HER,

  • "interface" er nøgleordet for at skabe grænseflader
  • "offentlig funktion...(...)" er de standardmetoder, der bør implementeres

Lad os nu skabe de konkrete klasser, der udvider DBCommonMethods-klassen og udvider DBInterface-grænsefladen. 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 }
 } ?>

HER,

  • "klasse ... udvider DBCommonMethods" bruger metoderne i DBCommonMethods
  • "... implementerer DBInterface" sikrer, at klassen leverer standardmetoder, uanset hvilken databasedriver der bruges.

Brug af ovenstående kode Koden, der bruger ovenstående klasse, vil se sådan ud

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

Or

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

Resten af ​​koden ville være den samme for begge drivere såsom;

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

Resumé

  • Objektorienteret programmering OOP er en kraftfuld teknik, der modellerer applikationer efter objekter i den virkelige verden
  • En klasse er en repræsentation af objekter fra den virkelige verden med egenskaber og metoder
  • De tre grundlæggende principper for OOP er;
  • Indkapsling
  • Arv
  • polymorfi