PHP objektorientert programmeringskonsept (OOP) med eksempel

โšก Smart oppsummering

Objektorientert programmering i PHP modellerer en applikasjon rundt virkelige objekter ved hjelp av klasser og objekter. Denne gjennomgangen forklarer OOP-prinsippene for innkapsling, arv og polymorfisme, hvordan PHP stรธtter dem, og bygger eksempler pรฅ arbeiderklasse, arv og grensesnitt trinn for trinn.

  • ๐Ÿงฑ Klasser og objekter: En klasse definerer egenskapene og metodene til en ting i den virkelige verden, og et objekt er en enkelt forekomst av den klassen.
  • ๐Ÿ”’ innkapsling: Private variabler med offentlige get- og set-metoder skjuler interne detaljer og beskytter et objekts tilstand.
  • ๐Ÿ‘ช Arv: Nรธkkelordet extends lar en barneklasse gjenbruke metodene til en foreldreklasse, noe som reduserer duplisert kode.
  • ๐Ÿ” Polymorfisme: Et grensesnitt definerer standardmetoder som mange klasser implementerer forskjellig bak รฉn enhetlig konfigurasjon.tract.
  • ๐Ÿ“ UML-klassediagram: Et klassediagram viser klassenavnet, variabler og metoder, med pluss-, minus- og hash-merkinger som offentlig, privat og beskyttet omfang.
  • ๐Ÿงฉ Grensesnitt og Abstract: En magemuskeltract-klassen deler felles kode, mens et grensesnitt garanterer at hver driverklasse tilbyr de samme metodene.
  • ๐Ÿค– AI Assist: AI-verktรธy kan generere en PHP-klasse fra en beskrivelse og omstrukturere prosedyrekode til ren objektorientert kode.

PHP objektorientert programmering

Hva er OOPs?

Objektorientert programmering er en tilnรฆrming til programvareutvikling som modellerer en applikasjon rundt virkelige objekter som ansatte, biler og bankkontoer. En klasse definerer egenskapene og metodene til et virkelig objekt. Et objekt er en forekomst av en klasse.

De tre grunnleggende komponentene i objektorientering er:

  • Objektorientert analyse โ€“ funksjonalitet til systemet
  • Objektorientert design โ€“ systemets arkitektur
  • Objektorientert programmering โ€“ implementering av applikasjonen

Objektorienterte programmeringsprinsipper

De tre hovedprinsippene for OOP er:

  • innkapsling โ€“ dette handler om รฅ skjule implementeringsdetaljene og kun eksponere metodene. Hovedformรฅlene med innkapsling er รฅ:
    • Reduser programvareutviklingskompleksiteten โ€“ ved รฅ skjule implementeringsdetaljene og bare avslรธre operasjonene, blir det enkelt รฅ bruke en klasse.
    • Beskytt den interne tilstanden til et objekt โ€“ tilgang til klassevariablene skjer via metoder som get og set. Dette gjรธr klassen fleksibel og enkel รฅ vedlikeholde.
    • Tillat at den interne implementeringen av klassen endres uten รฅ bekymre deg for รฅ bryte koden som bruker klassen.
  • Arv โ€“ dette handler om forholdet mellom klasser. Forholdet har form av en forelder og et barn. Barnet bruker metodene som er definert i foreldreklassen. Hovedformรฅlet med arv er:
    • Gjenbrukbarhet โ€“ flere barn kan arve fra samme forelder. Dette er veldig nyttig nรฅr vi mรฅ tilby felles funksjonalitet, som รฅ legge til, oppdatere og slette data fra databasen.
  • polymorfisme โ€“ dette handler om รฅ ha et enkelt grensesnitt med mange forskjellige implementeringer. Hovedformรฅlet med polymorfisme er:
    • For รฅ forenkle vedlikehold av applikasjoner og gjรธre dem mer utvidbare.

OOP Concepts i PHP

PHP er et objektorientert skriptsprรฅk; det stรธtter alle prinsippene ovenfor. Prinsippene ovenfor oppnรฅs via:

  • innkapsling โ€“ via bruk av ยซgetยป- og ยซsetยป-metodene, og tilgangsmodifikatorer.
  • Arv โ€“ ved bruk av nรธkkelordet extends
  • polymorfisme โ€“ ved bruk av nรธkkelordet implements

Nรฅ som vi har grunnleggende kunnskap om OOP og hvordan det stรธttes i PHP, la oss se pรฅ eksempler som implementerer prinsippene ovenfor.

Hva er UML?

Unified Modeling Language (UML) er en teknikk som brukes til รฅ designe og dokumentere objektorienterte systemer.

UML produserer en rekke dokumenter, men vi skal se pรฅ klassediagrammet, som er svรฆrt viktig for objektorientert PHP-programmering.

Eksempel pรฅ klassediagram

OOP Concepts i PHP

Klassediagramnรธkkel

  • Ocuco รธvre boks inneholder klassenavnet
  • Ocuco midtboks inneholder klassevariablene
  • Ocuco nedre boks inneholder klassemetodene
  • Ocuco minus (-) skilt betyr privat rekkevidde
  • Ocuco pluss (+) skilt betyr offentlig omfang
  • Ocuco hash (#) skilt betyr beskyttet omfang

Hvordan lage en klasse i PHP

Klasse nรธkkelordet brukes til รฅ definere en klasse i PHP. Nedenfor er reglene for รฅ lage en klasse i PHP.

  • Klassenavnet skal begynne med en bokstav
  • Klassenavnet kan ikke vรฆre et reservert PHP-ord
  • Klassenavnet kan ikke inneholde mellomrom

La oss si at vi รธnsker รฅ lage en klasse for รฅ representere dyr. Vi begynner med รฅ identifisere trekkene som er felles for alle dyr.

  • Alle dyr tilhรธrer en familie, som planteetere, kjรธttetere osv.
  • Alle dyr spiser mat

Diagrammet nedenfor viser klassediagrammet for dyret.

Lag en klasse i PHP

La oss nรฅ kode Animal-klassen vรฅr.

<?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 $family, $foodยป betyr at variablene ikke kan nรฅs direkte utenfor klassen (innkapsling).
  • ยซpublic function __construct($familyโ€ฆ)ยป er PHP-konstruktรธrmetoden. Denne funksjonen kalles hver gang en instans av klassen opprettes. I dette tilfellet setter vi family og food.
  • ยซpublic function getโ€ฆ()ยป er metoden som brukes for รฅ fรฅ tilgang til familie- eller matverdien (innkapsling)
  • ยซpublic function setโ€ฆ()ยป er metoden som brukes til รฅ angi familie- eller matverdien (innkapsling)

Slik implementerer du arv i PHP

Vi skal jobbe med en ku og en lรธve. Bรฅde kua og lรธven arver fra Dyreklassen.

Klassediagrammet nedenfor viser sammenhengene.

implementere arv i PHP

Merk at kua arver fra Animal-klassen og definerer sin egen variabel og metoder ogsรฅ.

La oss nรฅ 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;
    }
}
?>

La oss nรฅ kode Lion-klassen.

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

HER,

  • ยซklasse โ€ฆ utvider Animalยป gjรธr at Cow- og Lion-klassene bruker metoder fra Animal-klassen (arv).

Hvordan opprette et objekt av klassen

Klassene Animal, Cow og Lion bรธr alle vรฆre i samme katalog for enkelhets skyld.

La oss nรฅ lage applikasjonen som bruker klassene vรฅre.

Eksempel pรฅ PHP-klasse

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

Testing av sรธknaden vรฅr

La oss nรฅ se applikasjonen vรฅr i en nettleser.

Arv i PHP

Begge objektene gjenbruker metodene get_family og get_food som er arvet fra Animal-klassen, noe som demonstrerer arv i praksis.

Slik implementerer du polymorfisme i PHP

La oss si at vi รธnsker รฅ utvikle en applikasjon som kobler seg til forskjellige databasemotorer, som f.eks. MySQL og SQL Server, men bruker det samme ensartede grensesnittet. Vi kan lage et grensesnitt som definerer standardmetodene og en abstract-klassen som implementerer de vanlige metodene.

  • Interface โ€“ det ligner pรฅ en klasse. Den definerer bare metodene og parameterne.
  • AbstracT-klasse โ€“ det er en klasse som ikke kan brukes til รฅ lage et objekt direkte. Formรฅlet er รฅ gi delvis eller hele implementeringer av vanlige metoder.

Klassediagrammet nedenfor illustrerer forholdet mellom magemusklene vรฅretract-klasse, grensesnitt og implementeringsklasser.

Arv i PHP

La oss nรฅ bygge magemusklene vรฅretract-klassen.

<?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,

  • magemusklertract-klassenยป betyr at klassen ikke kan brukes direkte til รฅ opprette et objekt
  • "$host, $db..." er klassevariabler som er felles for alle implementeringer
  • ยซfunction __construct(โ€ฆ)ยป er klassekonstruktรธrmetoden som setter de vanlige variabelverdiene ved initialisering

La oss nรฅ lage grensesnittet som inneholder standardmetodene, som vil bli implementert forskjellig avhengig av 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,

  • "grensesnitt" er nรธkkelordet for รฅ lage grensesnitt
  • "offentlig funksjon...(...)" er standardmetodene som bรธr implementeres

La oss nรฅ lage de konkrete klassene som vil utvide DBCommonMethods-klassen og implementere DBInterface-grensesnittet. Fรธrst, 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 */ }
}
?>

Sรฅ, 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 โ€ฆ utvider DBCommonMethodsยป bruker metodene i DBCommonMethods
  • ยซโ€ฆ implements DBInterfaceยป sikrer at klassen tilbyr standardmetodene uavhengig av hvilken databasedriver som brukes.

Koden som bruker klassene ovenfor vil se slik ut:

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

Eller:

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

Resten av koden ville vรฆre den samme for begge driverne, for eksempel:

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

Dette er polymorfisme i aksjon: den samme metoden kaller arbeid pรฅ enhver driver som implementerer grensesnittet, slik at den omkringliggende koden aldri endres nรฅr du bytter databasemotorer.

Spรธrsmรฅl og svar

En magemuskeltract-klassen kan inneholde bรฅde implementerte metoder og egenskaper, og en klasse utvider bare รฉn. Et grensesnitt deklarerer bare metodesignaturer, og en klasse kan implementere mange. Bruk en abstract-klasse for รฅ dele kode, et grensesnitt for รฅ hรฅndheve en ulempetract.

De fire sรธylene er innkapsling, arv, polymorfisme og abstracDenne veiledningen fokuserer pรฅ de tre fรธrste; magemusklenetracskjuler komplekse detaljer bak et enkelt grensesnitt, som PHP stรธtter med abstract-klasser og grensesnitt.

Offentlige medlemmer er tilgjengelige hvor som helst, private medlemmer er bare tilgjengelige innenfor samme klasse, og beskyttede medlemmer innenfor klassen og dens underklasser. De hรฅndhever innkapsling ved รฅ kontrollere hvem som kan lese eller endre hver egenskap eller metode.

Ja. Gi AI feltene eller en tabelldefinisjon, og den kan produsere en klasse med typede egenskaper, en konstruktรธr og get- og set-metoder. RevSe typene og legg til validering fรธr du bruker klassen.

Ja. Lim inn prosedyreskriptet, sรฅ kan AI gruppere relaterte funksjoner og data i klasser, bruke innkapsling og foreslรฅ arv eller grensesnitt. Test den refaktorerte koden, siden oppfรธrselen skal forbli identisk.

Oppsummer dette innlegget med: