[ Príspevkov: 2 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.06.07
Prihlásený: 31.01.17
Príspevky: 66
Témy: 39 | 39
NapísalOffline : 14.05.2012 14:23 | Autoloading + namespaces

Neviem si poradit s problemom (PHP v5.3) ked chcem automaticky nacitavat triedy ktore vyuzivaju namespace.

Mam triedu:

Kód:
namespace Models;

class Test {
   
    public function __construct()
    {
        ...
    }
 
}


co sa tyka autoloading funkcie mam

Kód:
spl_autoload_extensions('.php');
spl_autoload_register(array($this, 'load'));


funkcia load je v poriadku

a teraz ked zavolam
Kód:
new \Models\Test();

tak vsetko prebehne v poriadku.
Ked ale zavolam
Kód:
new Test();

vyhodi mi to chybu Class 'Test' not found in ...

funkcia load sa stara aj o to ze ci vlozim celu cestu k triede alebo len nazov triedy vzdy includne to iste. Takze v tomto nebude chyba. Kazdopadne som si dal vypisat ze co includuje a v oboch pripadoch ci je to cez
Kód:
new \Models\Test()
alebo len
Kód:
new Test()
je cesta k includovanemu suboru rovnaka.

Predpokladam ze chyba je prave s tym namespaceom. Ked som pre triedu Test zrusil namespace (resp. som odstranil riadok namespace Models;) tak uz to islo pre new Test() a opacne pre new \Models\Test() to neslo.

Viete mi poradit ako sa mam s tymto problemom vysporiadat? Uz ma nic nenapada.


Offline

Čestný člen
Čestný člen
Autoloading + namespaces

Registrovaný: 11.08.07
Príspevky: 4110
Témy: 30 | 30
Bydlisko: Brno
NapísalOffline : 14.05.2012 16:19 | Autoloading + namespaces

No vsak ta trieda Test existuje len v mennom priestore Models, ale nie v globalnom namespace, preto je samozrejme, ze neexistuje. Vyskusaj si nebavkat sa so subormi, naincludovat ich poctivo a aj tak by si mal uvidiet, ze ti new Test() vyhadzuje chybu. S mennymi priestormi v PHP som nerobil, ale toto mi pride celkom logicke.


 [ Príspevkov: 2 ] 


Autoloading + namespaces




© 2005 - 2017 PCforum, edited by JanoF