Autoincarcarea claselor PHP (AutoLoading)

iNoob | Stefanescu Mihai | 2020-10-11

Una dintre principalele probleme intalnita in programare este structurarea aplicatiei si organizarea codului in asa fel incat aplicatia ta sa poata fi modificata usor (la o data ulterioara) si codul sa poata fi usor inteles de alti programatori (care probabil v-or lucra cu tine la proiect). Acest autoloading este important in mod special pentru aplicatiile pentru care dezvolti un oarecare framework. Bineinteles, exista o multime de framework-uri, de exemplu CodeIgniter si Laravel sunt doua framework-uri ce folosesc design pattern-ul Model View Controller (MVC). Daca ar trebuii sa ne construim singuri propriul framework ar trebuii sa gasim un mod de a incarca clasele necesare la cererea utilizatorilor. Autoincarcarea (autoloading-ul) este folositor  la incarcarea claselor pentru a nu le mai include in fiecare fisier.Hai sa presupunem ca toate link-urile duc catre index.php si in functie de link va fi creata o instanta a unei anumite clase. Probabil va ganditi ca puteti face ceva de genul acesta:

require_once('clase/clasa1.php');
require_once('clase/clasa2.php');
require_once('clase/clasa3.php');
require_once('clase/clasa4.php');
require_once('includes/functions.php');

Acest tip de “rezolvare” poate duce la anumite probleme. De exemplu, daca o clasa depinde de alta, sau daca clasele nu depinde una de alta, dar acest lucru se va schimba pe viitor aveti sanse destul de mari sa aveti probleme cu dependentele.Dar, folosirea unui autoloader va indeparta aceasta problema.

<?php
class clasaMea {
    public function __construct() {
        echo "Clasa Mea a fost instantiata...";
    }
}
?>

Sa presupunem ca avem clasa de mai sus pentru inceput. Acum hai sa scriem codul pentru un autoloader cat se poate de simplu:

<?php
function autoloaderulMeu($clasa) {
    $filename = "./". $clasa .".php";
    include_once($filename);
}

//Inregistram clasa in SPL
spl_autoload_register('autoloaderulMeu');

// acum apelam clasa
$obj = new clasaMea();
?>

Codul de mai sus va functiona fara probleme pentru ca, chiar daca nu am inclus fisierul cu clasa respectiva, acesta a fost inclus de autoloader.

Asta este tot pentru acest articol, desi ar trebuii sa mai mentionez i faptul ca incepand cu PHP 5.3 putem scrie un autoloader si cu ajutorul unei functii anonime:

spl_autoload_register(function ($clasa) {
    include 'clase/' . $clasa . '.class.php';
});

Intrebarile pot fi adresa mai jos, in sectiunea de comentarii sau in sectiunea dedicata special intrebarilor.


Imi place ce faci aici
Daca iti place ce fac aici imi poti cumpara o cafea Buy Me a Coffee at ko-fi.com

Stefanescu Mihai
Programator de ~8 ani, am lucrat la proiecte din mai multe industrstrii, de la eCommerce la telecomunicatii la automatizari. In acest timp am folosi diferite tehnologii, de la PHP, MySQL, PostgreSql, RabbitMq, Redis, Memcached si altele.
       

Get in touch
Pentru nelamuriri, dubii, comentarii si chestii de pe suflet ne putem auzi pe Discord, Reddit sau poti deschide o discutie noua pe forum.

Posteaza un comentariu

Comentarii

Inca nu au fost postate comentarii, fii primul care posteaza un comentariu!

Club-ul este dedicat membrilor si ofera access la mai multe zone ale website-ului.

🗝ïļ Login 🌟 Register

🔖 Bookmarks ⊞
âœĻ Pentru a sustine aceasta comunitate am sa te rog sa te autentifici sau sa te inregistrezi!

🌊ïļ Discord ⊞

Folosim cookie-uri pentru a oferi functionalitatile critice ale aplicatiei Invata-Programare. Folosim cookie-uri si pentru a analiza traficul, pentru care e nevoie de consimtamantul dvs. explicit.

⮆ïļ