• 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

Autoloading PHP klasa

Autor:Miodrag Stefanović
27. јуна 2014. 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/

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

  • Dobro informisani = bolje zaštićeni! Kako do sigurne kupovine?

    15. марта 2024.
  • 5 predmeta koji će vam olakšati pripremanje trpeze

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

    10. новембра 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

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 607
  • 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
  • Dani ploča na Kupindu: Vinil ne izlazi iz mode! Dunja Stojković 13. марта 2025. Kupindo
  • Top 10 predmeta sa Limunda i Kupinda u 2024. godini! Dunja Stojković 31. децембра 2024. LimundoGrad
  • Digital Awards 2024: Limundo osvojio nagradu za najbolju radijsku kampanju! Dunja Stojković 30. септембра 2024. LimundoGrad
  • Polovna odeća kao znak stila: 10 vrhunskih modnih brendova koje nećete naći u tržnom centru Ivana Lučić 26. августа 2024. LimundoGrad
  • Uživanje u letnjem danu – detalji koji čine baštu posebnom Dunja Stojković 1. августа 2024. Zabava i učenje

Skorašnji komentari

  • Jovana Milenković Arizanović на Tri najjeftinija načina za slanje paketa u LimundoGradu
  • Marija Protic на Tri najjeftinija načina za slanje paketa u LimundoGradu
  • Jovana Milenković Arizanović на Tri najjeftinija načina za slanje paketa u LimundoGradu
  • janoš на Tri najjeftinija načina za slanje paketa u LimundoGradu
  • janoš на Tri najjeftinija načina za slanje paketa u LimundoGradu

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