PHP objektorienterad programmering (OOPs) koncept Handledning med exempel

Vad รคr OOPs?

Objektorienterad รคr ett tillvรคgagรฅngssรคtt fรถr mjukvaruutveckling som modellerar tillรคmpningar kring verkliga objekt som anstรคllda, bilar, bankkonton, etc. En klass definierar egenskaperna och metoderna fรถr ett verkligt objekt. Ett objekt รคr en fรถrekomst av en klass.

De tre grundlรคggande komponenterna i objektorientering รคr;

  • Objektorienterad analys โ€“ systemets funktionalitet
  • Objektorienterad design โ€“ systemets arkitektur
  • Objektorienterad programmering โ€“ implementering av applikationen

Objektorienterade programmeringsprinciper

De tre huvudprinciperna fรถr OOP รคr;

  • inkapsling โ€“ det handlar om att dรถlja implementeringsdetaljerna och bara avslรถja metoderna. Huvudsyftet med inkapsling รคr att;
  • Minska komplexiteten i mjukvaruutvecklingen โ€“ genom att dรถlja implementeringsdetaljerna och bara avslรถja operationerna blir det enkelt att anvรคnda en klass.
  • Skydda ett objekts interna tillstรฅnd โ€“ รฅtkomst till klassvariablerna sker via metoder som get och set, detta gรถr klassen flexibel och lรคtt att underhรฅlla.
  • Den interna implementeringen av klassen kan รคndras utan att behรถva oroa dig fรถr att bryta koden som anvรคnder klassen.
  • Arv โ€“ det handlar om fรถrhรฅllandet mellan klasser. Relationen tar formen av en fรถrรคlder och ett barn. Barnet anvรคnder de metoder som definierats i den รถverordnade klassen. Huvudsyftet med arv รคr;
  • ร…teranvรคndbarhet โ€“ ett antal barn, kan รคrva frรฅn samma fรถrรคlder. Detta รคr mycket anvรคndbart nรคr vi mรฅste tillhandahรฅlla vanliga funktioner som att lรคgga till, uppdatera och ta bort data frรฅn databasen.
  • polymorfism โ€“ Det handlar om att ha en enda form men mรฅnga olika implementeringssรคtt. Huvudsyftet med polymorfism รคr;
  • Fรถrenkla underhรฅllet av applikationer och gรถr dem mer utbyggbara.

Hoppsan Concepts i PHP

PHP รคr ett objektorienterat skriptsprรฅk; den stรถder alla ovanstรฅende principer. Ovanstรฅende principer uppnรฅs via;

  • inkapsling โ€“ genom att anvรคnda โ€getโ€ och โ€setโ€ metoder etc.
  • Arv โ€“ genom att anvรคnda sรถkordet extends
  • polymorfism โ€“ genom att anvรคnda nyckelordet implements

Nu nรคr vi har den grundlรคggande kunskapen om OOP och hur det stรถds i PHP, lรฅt oss titta pรฅ exempel som implementerar ovanstรฅende principer

Vad รคr UML?

Unified Modeling Language UML รคr en teknik som anvรคnds fรถr att designa och dokumentera objektorienterade system.

UML producerar ett antal dokument, men vi kommer att titta pรฅ klassdiagrammet som รคr mycket viktigt fรถr objektorienterad php-programmering.

Exempel pรฅ klassdiagram

Hoppsan Concepts i PHP

Klassdiagram nyckel

  • Ocuco-landskapet ร–vre lรฅda innehรฅller klassnamnet
  • Ocuco-landskapet mellanlรฅda innehรฅller klassvariablerna
  • Ocuco-landskapet nedre ruta innehรฅller klassmetoderna
  • Ocuco-landskapet minus (-) tecken betyder privat omfattning
  • Ocuco-landskapet mer (+) tecken betyder offentlig rรคckvidd
  • Ocuco-landskapet hash (#) skylt betyder skyddad omfattning

Hur man skapar en klass i PHP

Klassnyckelordet anvรคnds fรถr att definiera en klass i PHP. Nedan finns reglerna fรถr att skapa en klass i PHP.

  • Klassnamnet ska bรถrja med en bokstav
  • Klassnamnet kan inte vara ett reserverat PHP-ord
  • Klassnamnet fรฅr inte innehรฅlla mellanslag

Lรฅt oss sรคga att vi vill skapa en klass fรถr att representera djur.

Vi bรถrjar med att identifiera de egenskaper som รคr gemensamma fรถr alla djur.

  • Alla djur tillhรถr en familj som vรคxtรคtare, karneval etc.
  • Alla djur รคter mat

Diagrammet nedan visar diagrammet fรถr djuret

Skapa en klass i PHP

Lรฅt oss nu koda vรฅr djurklass

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

Hร„R,

  • "privat $familj, $mat" betyder att variablerna inte kan nรฅs direkt utanfรถr klassen (Encapsulation).
  • "public function __construct($family...)" รคr php-konstruktormetoden. Denna funktion anropas nรคr en instans av klassen har skapats. I det hรคr fallet sรคtter vi familjen och maten.
  • "public function get...()" รคr metoden som anvรคnds fรถr att komma รฅt familjen eller matvรคrdet (Encapsulation)
  • "public function set...()" รคr metoden som anvรคnds fรถr att stรคlla in familjen eller matens vรคrde (Encapsulation)

Hur implementerar arv i PHP

Vi ska jobba med en ko och ett lejon. Bรฅde kon och lejonet รคrver frรฅn Djurklassen.

Klassdiagrammet nedan visar sambanden.

implementera arv i PHP

Notera att kon รคrver frรฅn djurklassen och definierar ocksรฅ sin egen variabel och metoder.

Lรฅt oss nu koda 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;
    }
}
?>

Lรฅt oss nu koda Lion-klassen

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

Hร„R,

  • "klass ... fรถrlรคnger djur" gรถr att kon och lejon anvรคnder metoder frรฅn djurklassen (arv).

Hur man skapar objekt fรถr klassen

Djur-, ko- och lejonklasserna bรถr alla vara i samma katalog fรถr enkelhetens skull.

Lรฅt oss nu skapa applikationen som anvรคnder vรฅra klasser.

PHP-klassexempel

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

Testar vรฅr applikation

Lรฅt oss nu titta pรฅ vรฅr applikation i en webblรคsare

Arv i PHP

Fantastiskt rรคtt! Lรฅt oss nu titta pรฅ den tredje principen fรถr OOP, polymorfism.

Lรฅt oss sรคga att vi vill utveckla en applikation som ansluter till olika databasmotorer som t.ex MySQL och SQL Server men anvรคnder samma enhetliga grรคnssnitt.

Vi kan skapa ett grรคnssnitt som definierar standardmetoderna och en abstrakt klass som implementerar de vanliga metoderna.

  • Grรคnssnitt โ€“ det liknar en klass. Den definierar bara metoderna och parametrarna.
  • Abstrakt klass โ€“ det รคr en klass som inte kan anvรคndas fรถr att skapa ett objekt direkt. Dess syfte รคr att tillhandahรฅlla partiella eller hela implementeringar av vanliga metoder.

Klassdiagrammet nedan illustrerar fรถrhรฅllandet mellan vรฅra abstrakta klasser, grรคnssnitt och implementeringsklasser.

Arv i PHP

Lรฅt oss nu skapa vรฅr abstrakta klass

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

Hร„R,

  • "abstrakt klass" betyder att klassen inte kan anvรคndas direkt fรถr att skapa ett php-objekt
  • "$host,$db..." รคr klassvariabler som รคr gemensamma fรถr alla implementeringar
  • "function __construct(...)" รคr php-klasskonstruktormetoden som stรคller in de vanliga variablernas vรคrden vid initiering

Lรฅt oss nu skapa grรคnssnittet som innehรฅller standardmetoderna som kommer att implementeras olika beroende pรฅ databasmotorn.

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

Hร„R,

  • "grรคnssnitt" รคr nyckelordet fรถr att skapa grรคnssnitt
  • "offentlig funktion...(...)" รคr standardmetoderna som bรถr implementeras

Lรฅt oss nu skapa de konkreta klasserna som utรถkar klassen DBCommonMethods och utรถkar DBInterface-grรคnssnittet. 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 }
 } ?>

Hร„R,

  • "klass ... utรถkar DBCommonMethods" anvรคnder metoderna i DBCommonMethods
  • "... implementerar DBInterface" sรคkerstรคller att klassen tillhandahรฅller standardmetoder oavsett vilken databasdrivrutin som anvรคnds.

Anvรคndning av ovanstรฅende kod Koden som anvรคnder ovanstรฅende klass skulle se ut sรฅ hรคr

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

Or

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

Resten av koden skulle vara densamma fรถr bรฅda drivrutinerna som;

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

Sammanfattning

  • Objektorienterad programmering OOP รคr en kraftfull teknik som modellerar applikationer efter verkliga objekt
  • En klass รคr en representation av verkliga objekt med egenskaper och metoder
  • De tre grundlรคggande principerna fรถr OOP รคr;
  • inkapsling
  • Arv
  • polymorfism

Sammanfatta detta inlรคgg med: