• Početna
  • O nama
  • LimundoGrad
  • Limundo
  • Kupindo
  • Sigurnost
  • IT
  • Zabava i učenje
  • Plaćanje
  • API
LimundoGrad blog
  • Početna
  • O nama
  • LimundoGrad
  • Limundo
  • Kupindo
  • Sigurnost
  • IT
  • Zabava i učenje
  • Plaćanje
  • API
Home  /  IT  /  Autoloading PHP klasa
27 jun 2014

Autoloading PHP klasa

Autor:Miodrag Stefanović
IT saveti 2 komentara

U svakom iole ozbiljnijem bavljenju PHP programiranjem imate potrebu da definišete manji, ili verovatnije, veći broj sopstvenih klasa. Svaku vašu klasu ćete najverovatnije pisati i čuvati u zasebnom PHP fajlu,  koji je nakon toga neophodno da uključite u svaku PHP skriptu gde ćete koristiti datu klasu. Kod većih PHP softvera broj PHP skripti i njihovih međuzavisnosti raste eksponencijalno, što otežava praćenje kada je koja klasa neophodna. Koncept autoloadinga je uveden kako bi se rešio ovaj problem.

Installing
Preuzeto sa XKCD


Primer standardnog uključivanja klase:
proba.class.php:

<?php
class Proba {
function Ispis(){

    echo “A”;
   }
}
?>

index.php:

<?php
require(“proba.class.php”);
$Proba=new Proba();
$Proba->Ispis();
?>

Na ekranu će se ispisati “A”.

Ovo je prost primer i uključivanje klase proba je jednostavno. Međutim, kako budete dodavali sve više frontend PHP skripti koje se međusobno uključuju require / include direktivama, i koje koriste sve veći broj klasa, doći ćete u situaciju da više niste sigurni koje su vam sve klase potrebne i u kom trenutku (neke klase se možda koriste samo pod određenim uslovima).

Jedno rešenje je da “za svaki slučaj” uključite sve (ili veći broj) klasa. Pametnije ali zahtevnije rešenje bi bilo da pažlivo vodite računa koje klase se pozivaju u kom PHP fajlu i da samo njih uključujete, sa ciljem da smanjite uvlačenje nepotrebnih klasa i opterećenje PHP interpretera.

Od PHP 5 nam je dostupno jedno još pametnije rešenje – autoloading. Ovaj koncept ima za cilj da programerima omogući da više ne moraju da vode računa o tome koje klase je neophodno uključivati gde. Preko magične __autoload() funkcije možete svoje PHP softvere da naučite kako da sami uključuju klase koje su im potrebne i to u trenutku kada su im potrebne.
Ukoliko ste definisali __autoload metodu, PHP će prvo nju pozvati kada pokušate da instancirate nepostojeću klasu, pa će tek onda baciti fatal error ako je i tu ne nađe. Kao parametar se automatski prosleđuje ime klase čije je instanciranje omanulo, i od programera se očekuje da na osnovu tog imena uključi odgovarajući PHP fajl sa definicijom klase.

Primer skripte sa korišćenjem magične __autoload() metode:
index.php:
<?php
function __autoload($imeKlase) {

    require_once $imeKlase . ‘.class.php’;
}

$Proba=new Proba();
$Proba->Ispis();
?>

Ova skripta će takođe ispisati “A”, iako ovoga puta nigde nije eksplicitno naveden
require(“proba.class.php”);
Prilikom pokušaja instanciranja Proba klase, PHP će shvatiti da ta klasa nije definisana pa će pozvati __autoload() gde smo napravili logiku koja će (u ovom sllučaju uspešno) pokušati da uključi ispravnu definiciju klase.

Ali priča se tu ne završava – od verzije PHP 5.1.2. je kroz SPL (Standard PHP library) dostupna
spl_autoload_register()
metoda koja zamenjuje magičnu __autoload() metodu.
__autoload() je zvanično proglašena za zastarelu (deprecated) i preporučuje se da se isključivo koristi spl_autoload_register().
Koncept je praktično isti, samo što se sada ne koristi magična metoda fiksiranog imena, već možete da definišete proizvoljan broj svojih metoda, i da ih kroz spl_autoload_register() dodajete u niz metoda koje će biti redom pozivane ukoliko ne postoji klasa čiji objekat pokušavate da instancirate. Možete da definišete redosled kojim se funkcije koje pokušavaju da učitaju definiciju klase pozivaju, i tako na pregledan način napravite logiku za pronalaženje potrebne klase.

Primer autoloading-a kroz spl_autoload_register():
index.php

<?php
function DodajKlasu($imeKlase) {

    require_once $imeKlase . ‘.class.php’;
}

spl_autoload_register(“DodajKlasu”);
$Proba=new Proba();
$Proba->Ispis();
?>

Koncept izvršavanja je isti kao u prethodnom primeru, sa razlikom što se ovde koristi spl_autoload_register(). U slučaju da nam se klase nalaze u nekoliko različitih direktorijumima, možemo da definisemo više metoda od kojih će svaka da pokuša da pronađe definiciju klase u odgovarajućem folderu, i da ih dodamo željenim redosledom kroz spl_autoload_register().

Jedno od važnih pitanja je da li korišćenje autoloadinga dodatno opterećuje aplikacione servere? Odgovor je – praktično ne. U praksi, cena učitavanja definicija klasa sa diska je mnogo veća od proračuna gde se te klase nalaze. Zapravo u praksi autoloading može i da smanji opterećenje servera na kome se “vrti” PHP. Sa obzirom da struktura PHP skripti i klasa često ume da bude vrlo duboko ulančana, broj klasa koje se nepotrebno uključuju sa diska može da bude prilično veliki. Autoloading obezbeđuje da uključujemo samo one klase koje se zaista koriste u toku izvršavanja datog PHP softvera.

Ovo je tek početak priče o autoloadingu u PHP-u, u nekom od sledećih blogova možda pokrijemo dalju razradu. Onima koji ne žele da čekaju mogu da preporučim da se upoznaju sa PSR-0 standardom imenovanja klasa i njihove hijerarhije. Ovaj standard je definisala PHP Framework Interop Group sa ciljem da se omogući standardizacija autoloadinga i njegova implementacija kroz različite framework-e:
http://www.php-fig.org/psr/psr-0/

Fejsbuk komentari

Podeli tekst
Share on Facebook
Share on Twitter
Share on Whatsapp
 Prethodni post Muzika na putu
Sledeći post   TOP 20 najtraženijih predmeta

Povezani postovi

  • 5 predmeta koji će vam olakšati pripremanje trpeze

    6. јануара 2021.
  • Pomoć u odabiru prave knjige za poklon

    10. новембра 2020.
  • Putovanje sa psom

    Kako da vam putovanje sa psom bude lakše

    7. октобра 2020.

komentara

  1. j4m0r3
    9. јула 2014. at 02:59

    Svaka cast na ovom uputstvu. Ovo je odlicno.

  2. j4m0r3
    14. јула 2014. at 02:33

    Mozes li da napises nesto o Hbase, ako znas? Hvala

Ostavite komentar

Advertisement

Popularno na Kupindu

U potrazi ste za udžbenicima za osnovnu ili srednju školu? Pogledajte na Kupindu:

➡️ Udžbenici za osnovnu školu
➡️ Udžbenici za srednju školu

Ovde ćete pronaći udžbenike za svaki razred i izdanja gotovo svih izdavača koje današnje škole traže. Uštedite na kupovini udžbenika.

  • Najpopularnije
  • Poslednji postovi
  • Za sledećih 15 Vladimir Nikolić 22. маја 2021. Limundo 603
  • Hoću da znam šta je neko kupio i prodao Vladan Jović 16. децембра 2013. LimundoGrad 355
  • Kako da ocenim prodavca (a da to bude ispravno)? Ana Mladenović 12. марта 2013. LimundoGrad 248
  • Veštačko nuđenje – istine i laži Vladan Jović 11. јуна 2013. Limundo 234
  • Cenovnik + opcije + brzina Aleksandra Vuković 15. марта 2012. Blog 211
  • dopuni Limundo račun i tokom praznika
    Dopuni Limundo račun i tokom praznika Jovana Marković 21. априла 2022. Plaćanje 0
  • Ponudi manje – nova opcija [test] Vladimir Nikolić 24. јануара 2022. Blog, Limundo 45
  • Otvorena pozicija – PHP Web Developer Vladimir Nikolić 23. децембра 2021. Uncategorized 0
  • Visa akcija za plaćanje predmeta
    Visa akcija za plaćanje predmeta i dopunu računa Vladimir Nikolić 22. новембра 2021. Limundo, Plaćanje 18
  • Mogućnost plaćanja karticom i novi uslovi Vladimir Nikolić 22. новембра 2021. Limundo, Plaćanje 7

Skorašnji komentari

  • Dragana на Pre nego što usvojite macu
  • Anja Divković на Prevareni ste? Vraćamo vam novac!
  • Vladimir Nikolić на Za sledećih 15
  • Zlata Đukić на Prevareni ste? Vraćamo vam novac!
  • Vladimir Nikolić на Za sledećih 15

Vremeplov

© 2008. LimundoGrad d.o.o. Creative Commons License Ovo delo je licencirano pod uslovima licence Creative Commons Autorstvo-Nekomercijalno-Bez prerada 4.0 Međunarodna licenca
LimundoGrad koristi kolačiće u statističke i marketinške svrhe. Nastavkom korišćenja sajta smatramo da ste pristali na upotrebu kolačića.OKViše informacija