Η έννοια του αντικειμενοστρεφούς προγραμματισμού (OOPs) PHP με παράδειγμα
⚡ Έξυπνη Σύνοψη
Ο Αντικειμενοστρεφής Προγραμματισμός στην PHP μοντελοποιεί μια εφαρμογή γύρω από αντικείμενα του πραγματικού κόσμου χρησιμοποιώντας κλάσεις και αντικείμενα. Αυτή η αναλυτική παρουσίαση εξηγεί τις αρχές ενθυλάκωσης, κληρονομικότητας και πολυμορφισμού OOP, πώς τις υποστηρίζει η PHP και δημιουργεί παραδείγματα εργατικής τάξης, κληρονομικότητας και διεπαφών βήμα προς βήμα.

Τι είναι το OOPs;
Ο αντικειμενοστρεφής προγραμματισμός είναι μια προσέγγιση στην ανάπτυξη λογισμικού που μοντελοποιεί μια εφαρμογή γύρω από αντικείμενα του πραγματικού κόσμου, όπως εργαζόμενοι, αυτοκίνητα και τραπεζικοί λογαριασμοί. Μια κλάση ορίζει τις ιδιότητες και τις μεθόδους ενός αντικειμένου του πραγματικού κόσμου. Ένα αντικείμενο είναι μια παρουσία μιας κλάσης.
Τα τρία βασικά στοιχεία του αντικειμενοστρεφούς προσανατολισμού είναι:
- Αντικειμενοστραφής ανάλυση – λειτουργικότητα του συστήματος
- Αντικειμενοστρεφής σχεδιασμός – αρχιτεκτονική του συστήματος
- Αντικειμενοστραφής προγραμματισμός – υλοποίηση της εφαρμογής
Αρχές Αντικειμενοστρεφούς Προγραμματισμού
Οι τρεις βασικές αρχές του OOP είναι:
- Ενθυλάκωση – αυτό αφορά την απόκρυψη των λεπτομερειών υλοποίησης και την αποκάλυψη μόνο των μεθόδων. Οι κύριοι σκοποί της ενθυλάκωσης είναι:
- Μειώστε την πολυπλοκότητα ανάπτυξης λογισμικού – με την απόκρυψη των λεπτομερειών υλοποίησης και την έκθεση μόνο των λειτουργιών, η χρήση μιας κλάσης γίνεται εύκολη.
- Προστασία της εσωτερικής κατάστασης ενός αντικειμένου – η πρόσβαση στις μεταβλητές της κλάσης γίνεται μέσω μεθόδων όπως οι get και set. Αυτό καθιστά την κλάση ευέλικτη και εύκολη στη συντήρηση.
- Επιτρέψτε την αλλαγή της εσωτερικής υλοποίησης της κλάσης χωρίς να ανησυχείτε για το ενδεχόμενο παραβίασης του κώδικα που χρησιμοποιεί την κλάση.
- Κληρονομία – αυτό αφορά τη σχέση μεταξύ των κλάσεων. Η σχέση έχει τη μορφή ενός γονέα και ενός παιδιού. Το παιδί χρησιμοποιεί τις μεθόδους που ορίζονται στην γονική κλάση. Ο κύριος σκοπός της κληρονομικότητας είναι:
- Επαναχρησιμοποίηση – πολλά παιδιά μπορούν να κληρονομήσουν από τον ίδιο γονέα. Αυτό είναι πολύ χρήσιμο όταν πρέπει να παρέχουμε κοινές λειτουργίες, όπως προσθήκη, ενημέρωση και διαγραφή δεδομένων από τη βάση δεδομένων.
- Πολυμορφισμός – αυτό αφορά την ύπαρξη μιας ενιαίας διεπαφής με πολλές διαφορετικές υλοποιήσεις. Ο κύριος σκοπός του πολυμορφισμού είναι:
- Για να απλοποιηθεί η συντήρηση των εφαρμογών και να γίνουν πιο επεκτάσιμες.
OOPs Concepts σε PHP
Η PHP είναι μια αντικειμενοστρεφής γλώσσα σεναρίων. Υποστηρίζει όλες τις παραπάνω αρχές. Οι παραπάνω αρχές επιτυγχάνονται μέσω:
- Ενθυλάκωση – μέσω της χρήσης των μεθόδων «get» και «set» και τροποποιητών πρόσβασης.
- Κληρονομία – μέσω της χρήσης της λέξης-κλειδιού extends
- Πολυμορφισμός – μέσω της χρήσης της λέξης-κλειδιού implements
Τώρα που έχουμε τις βασικές γνώσεις του OOP και πώς υποστηρίζεται PHP, ας δούμε παραδείγματα που εφαρμόζουν τις παραπάνω αρχές.
Τι είναι το UML;
Η Ενοποιημένη Γλώσσα Μοντελοποίησης (UML) είναι μια τεχνική που χρησιμοποιείται για το σχεδιασμό και την τεκμηρίωση αντικειμενοστρεφών συστημάτων.
Η UML παράγει έναν αριθμό εγγράφων, αλλά θα εξετάσουμε το διάγραμμα κλάσεων, το οποίο είναι πολύ σημαντικό για τον αντικειμενοστρεφή προγραμματισμό PHP.
Παράδειγμα διαγράμματος τάξης
Κλειδί διαγράμματος τάξης
- The άνω κουτί περιέχει το όνομα της τάξης
- The μεσαίο κουτί περιέχει τις μεταβλητές κλάσης
- The κάτω κουτί περιέχει τις μεθόδους κλάσης
- The μείον (-) το σύμβολο σημαίνει ιδιωτικό πεδίο εφαρμογής
- The συν (+) σημάδι σημαίνει δημόσια εμβέλεια
- The κατακερματισμός (#) σημάδι σημαίνει προστατευόμενο πεδίο
Πώς να δημιουργήσετε μια τάξη στην PHP
Η λέξη-κλειδί class χρησιμοποιείται για τον ορισμό μιας κλάσης στην PHP. Παρακάτω είναι οι κανόνες για τη δημιουργία κλάσης στην PHP.
- Το όνομα της τάξης πρέπει να ξεκινά με ένα γράμμα
- Το όνομα της κλάσης δεν μπορεί να είναι δεσμευμένη λέξη στην PHP
- Το όνομα της κλάσης δεν μπορεί να περιέχει κενά
Ας υποθέσουμε ότι θέλουμε να δημιουργήσουμε μια κλάση για την αναπαράσταση ζώων. Θα ξεκινήσουμε προσδιορίζοντας τα χαρακτηριστικά που είναι κοινά σε όλα τα ζώα.
- Όλα τα ζώα ανήκουν σε μια οικογένεια όπως τα φυτοφάγα, τα σαρκοφάγα κ.λπ.
- Όλα τα ζώα τρώνε τροφή
Το παρακάτω διάγραμμα δείχνει το διάγραμμα κλάσης για το ζώο.
Ας κωδικοποιήσουμε τώρα την κλάση μας "Ζώα".
<?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; } } ?>
ΕΔΩ,
- «ιδιωτική $family, $food» σημαίνει ότι οι μεταβλητές δεν μπορούν να προσπελαστούν απευθείας εκτός της κλάσης (ενθυλάκωση).
- Η «public function __construct($family…)» είναι η μέθοδος κατασκευής PHP. Αυτή η συνάρτηση καλείται κάθε φορά που δημιουργείται μια παρουσία της κλάσης. Σε αυτήν την περίπτωση, ορίζουμε την οικογένεια και το food.
- Η μέθοδος «public function get…()» χρησιμοποιείται για την πρόσβαση στην οικογενειακή ή τροφική αξία (ενθυλάκωση).
- Η «public function set…()» είναι η μέθοδος που χρησιμοποιείται για τον ορισμό της τιμής οικογένειας ή τροφής (ενθυλάκωση)
Πώς να εφαρμόσετε την κληρονομικότητα σε PHP
Θα δουλέψουμε με μια αγελάδα και ένα λιοντάρι. Τόσο η αγελάδα όσο και το λιοντάρι κληρονομούν από την τάξη των Ζώων.
Το παρακάτω διάγραμμα τάξης δείχνει τις σχέσεις.
Σημειώστε ότι η αγελάδα κληρονομεί από την κλάση Animal και ορίζει επίσης τη δική της μεταβλητή και μεθόδους.
Ας κωδικοποιήσουμε τώρα την κλάση Cow.
<?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; } } ?>
Ας κωδικοποιήσουμε τώρα την κλάση Lion.
<?php class Lion extends Animal { public function __construct($family, $food) { parent::__construct($family, $food); } } ?>
ΕΔΩ,
- Η «κλάση … επεκτείνει το Animal» κάνει τις κλάσεις Cow και Lion να χρησιμοποιούν μεθόδους από την κλάση Animal (κληρονομικότητα).
Πώς να δημιουργήσετε ένα αντικείμενο της κλάσης
Οι κατηγορίες Animal, Cow και Lion θα πρέπει να βρίσκονται στον ίδιο κατάλογο για λόγους απλότητας.
Ας δημιουργήσουμε τώρα την εφαρμογή που χρησιμοποιεί τις κλάσεις μας.
Παράδειγμα κλάσης PHP
<?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(); ?>
Δοκιμή της εφαρμογής μας
Ας δούμε τώρα την εφαρμογή μας σε ένα πρόγραμμα περιήγησης ιστού.
Και τα δύο αντικείμενα επαναχρησιμοποιούν τις μεθόδους get_family και get_food που κληρονομήθηκαν από την κλάση Animal, η οποία καταδεικνύει την κληρονομικότητα στην πράξη.
Πώς να εφαρμόσετε τον πολυμορφισμό σε PHP
Ας υποθέσουμε ότι θέλουμε να αναπτύξουμε μια εφαρμογή που συνδέεται με διαφορετικές μηχανές βάσεων δεδομένων, όπως π.χ. MySQL και SQL Διακομιστής αλλά χρησιμοποιεί την ίδια ομοιόμορφη διεπαφή. Μπορούμε να δημιουργήσουμε μια διεπαφή που ορίζει τις τυπικές μεθόδους και ένα abstracκλάση t που υλοποιεί τις κοινές μεθόδους.
- περιβάλλον λειτουργίας – είναι παρόμοιο με μια τάξη. Καθορίζει μόνο τις μεθόδους και τις παραμέτρους.
- Abstracκατηγορίας t – είναι μια κλάση που δεν μπορεί να χρησιμοποιηθεί για τη δημιουργία ενός αντικειμένου απευθείας. Σκοπός του είναι να παρέχει μερικές ή ολόκληρες υλοποιήσεις κοινών μεθόδων.
Το παρακάτω διάγραμμα κλάσεων απεικονίζει τη σχέση μεταξύ των κοιλιακών μας.tracκλάση t, διεπαφή και κλάσεις υλοποίησης.
Ας δημιουργήσουμε τώρα τους κοιλιακούς μαςtracτάξη τ.
<?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; } } ?>
ΕΔΩ,
- «κοιλιακοί»tracΗ κλάση t σημαίνει ότι η κλάση δεν μπορεί να χρησιμοποιηθεί απευθείας για τη δημιουργία ενός αντικειμένου
- Οι μεταβλητές κλάσης "$host, $db..." είναι κοινές σε όλες τις υλοποιήσεις
- Η «function __construct(…)» είναι η μέθοδος κατασκευής κλάσης που ορίζει τις τιμές των κοινών μεταβλητών κατά την αρχικοποίηση
Ας δημιουργήσουμε τώρα τη διεπαφή που περιέχει τις τυπικές μεθόδους, οι οποίες θα υλοποιηθούν διαφορετικά ανάλογα με τη μηχανή βάσης δεδομένων.
<?php
interface DBInterface
{
public function db_connect();
public function insert($data);
public function read($where);
public function update($where);
public function delete($where);
}
?>
ΕΔΩ,
- "Διασύνδεση" είναι η λέξη-κλειδί για τη δημιουργία διεπαφών
- Η «δημόσια λειτουργία…(…)» είναι οι τυπικές μέθοδοι που πρέπει να εφαρμοστούν
Ας δημιουργήσουμε τώρα τις συγκεκριμένες κλάσεις που θα επεκτείνουν την κλάση DBCommonMethods και θα υλοποιήσουν τη διεπαφή DBInterface. Πρώτον, 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 */ } } ?>
ΕΔΩ,
- Η «κλάση … επεκτείνει το DBCommonMethods» χρησιμοποιεί τις μεθόδους στο DBCommonMethods
- Η εντολή «… υλοποιεί το DBInterface» διασφαλίζει ότι η κλάση παρέχει τις τυπικές μεθόδους ανεξάρτητα από το πρόγραμμα οδήγησης βάσης δεδομένων που χρησιμοποιείται.
Ο κώδικας που χρησιμοποιεί τις παραπάνω κλάσεις θα μοιάζει με αυτό:
<?php $db = new MySQLDriver($host, $db, $uid, $password); ?>
Ή:
<?php $db = new MSSQLServerDriver($host, $db, $uid, $password); ?>
Ο υπόλοιπος κώδικας θα είναι ο ίδιος και για τους δύο οδηγούς, όπως:
<?php $db->db_connect(); $db->insert($data); ?>
Αυτός είναι ο πολυμορφισμός στην πράξη: η ίδια μέθοδος καλεί την εντολή work σε οποιοδήποτε πρόγραμμα οδήγησης που υλοποιεί τη διεπαφή, επομένως ο περιβάλλοντας κώδικας δεν αλλάζει ποτέ όταν αλλάζετε μηχανές βάσεων δεδομένων.





