Αυτόματη φόρτωση κλάσεων στην OOP στην PHP
Γνωρίζετε ήδη ότι για να χρησιμοποιήσετε
μια κλάση, πρέπει να την συμπεριλάβετε
μέσω του require. Όταν ένα project
έχει πολλές κλάσεις, προκύπτουν πολλές
εντολές συμπερίληψης, οι οποίες είναι πολύ
άβολο να γράφονται και δύσκολο να ελεγχθούν.
Για την επίλυση αυτού του προβλήματος, προστέθηκε στην PHP η αυτόματη φόρτωση κλάσεων. Η αυτόματη φόρτωση επιτρέπει στην PHP να φορτώνει αυτόματα το αρχείο μιας κλάσης κατά την προσπάθεια πρόσβασης σε αυτήν την κλάση στον κώδικα. Ωστόσο, οι κλάσεις δεν θα φορτώνονται απλώς - πρέπει να τοποθετηθούν σε φακέλους του site με έναν ειδικό τρόπο, ακολουθώντας κάποια συμφωνία για τα ονόματα αρχείων και φακέλων των κλάσεων. Μπορείτε να χρησιμοποιήσετε την ενσωματωμένη στην PHP συμφωνία, ή να επινοήσετε τη δική σας και να τη χρησιμοποιήσετε.
Ας εξετάσουμε πρώτα την τυπική συμφωνία της PHP. Αυτή η συμφωνία συνίσταται στο ότι αν έχουμε ένα αρχείο με μια κλάση, τότε η διαδρομή μέσω των φακέλων του site προς αυτό το αρχείο πρέπει να συμπίπτει με τον χώρο ονομάτων του αρχείου, και το όνομα του αρχείου πρέπει να συμπίπτει με το όνομα της κλάσης που περιέχεται σε αυτό. Σε αυτήν την περίπτωση, τα ονόματα των φακέλων και του αρχείου πρέπει να είναι σε πεζά γράμματα.
Ας δούμε ένα παράδειγμα. Ας υποθέσουμε ότι έχουμε την ακόλουθη κλάση:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Σύμφωνα με τη συμφωνία, αυτή η κλάση πρέπει να βρίσκεται
στον φάκελο /core/admin/ στο αρχείο
pagecontroller.php.
Ας χρησιμοποιήσουμε τώρα στο αρχείο index.php την
κλάση μας, χωρίς να την συμπεριλάβουμε μέσω require,
αλλά χρησιμοποιώντας την αυτόματη φόρτωση. Για αυτό, στην αρχή
του αρχείου, στο οποίο καλούνται οι κλάσεις, πρέπει
να καλέσετε τη συνάρτηση spl_autoload_register.
Ας το κάνουμε:
<?php
spl_autoload_register(); // ενεργοποιούμε την αυτόματη φόρτωση
$obj = new Core\Admin\PageController; // δημιουργούμε ήρεμα ένα αντικείμενο
?>
Στο αρχείο index.php ενεργοποιήστε την αυτόματη
φόρτωση κλάσεων. Ακολουθώντας τη συμφωνία για τα ονόματα
φακέλων και αρχείων δημιουργήστε την κλάση Core\User,
την κλάση Core\Admin\Controller και την κλάση
Project\User\Data. Στο αρχείο index.php
δημιουργήστε αντικείμενα αυτών των κλάσεων.