Autor Zpráva
Karlos
Profil *
Dobrý den, možná mám trochu blbý dotaz, ale zajímá mě, jestli je možná autoloadovat celé jmenné prostory jako je tomu například v jiných jazycích.
Například mám jmenný prostor System a v něm třídy Object, String, Array. A udělal bych třeba nějakou funkci using($namespace).
Pak by se napsalo using(System) a měl bych přístup ke všem třídám v tomto prostoru a nemusel bych ručně psát use System\Object, System\String...
Používá to někdo? nebo nevěděl by někdo jak to udělat? Nebylo by to výhodnější?
Díky
Alphard
Profil
Teď nevím, o co přesně vám jde, autoload je funkce pro načítání jednotlivých tříd, ale z vašeho příspěvku se mi zdá, že hledáte spíš něco jako use.
Karlos
Profil *
No jde mi tak trochu o spojení obojího. Předpokládejme že třídy jsou ve složkách podle názvů jmenný prostorů. Když bych teda udělal třeba use System\Database, otevřela by se složka System/Database a na všechny soubory v ní by se zavolal include_once. Tím by se zjednodušil celý kod, nemuseli by se před každou třídu psát jmenné prostory, na začátku souboru by se prostě naincludoval celý prostor.
Jenom jsem chtěl vědět jestli by to bylo výhodné, nebo jestli někdo takový skript nemá
Radek9
Profil
Karlos:
Můžeš použít ten zmíněný autoload. Jako parametr dostaneš jméno třídy včetně jmenného prostoru. Takže to stačí explodnout a načíst správnou třídu.
Karlos
Profil *
Jak by to asi mělo zhruba vypadat? s autoloadem nemám moc zkušeností..
Alphard
Profil
Karlos:
Můžete ukázat, jak teď pracujete, jestli něco neděláte zbytečně?

Já si myslím, že php funguje tak, jak chcete, aby fungovalo :-) na načítání tříd používám Nette robot loader, na začátku souboru s třídou uvedu její namespace, dám tam use jmenných prostorů, které potřebují, a pak už jen pracuji s třídami (žádné include apod.).
Radek9
Profil
Karlos:
Velice zjednodušeně třeba takto:
function __autoload($class) {
  require_once Str_replace("\\", "/", $class) . ".php";
}
ShiraNai7
Profil
Nic jako autoload pro namespace neexistuje. Autoload je čistě pro třídy. Už na to byl požadavek na https://bugs.php.net/bug.php?id=62162 Uzavřené to není, ale nemyslím si, že se něco takového bude implementovat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: