Autor | Zpráva | ||
---|---|---|---|
Lokutus7323 Profil * |
#1 · Zasláno: 17. 3. 2011, 22:47:19
Dobrý večer,
narazil jsem na takový problém. Na svém lokálním serveru normálně používám například Prestashop, který používá funkci __autoload bez problémů. (jinak by se vůbec nenačetly potřebné třídy). Na tom samém serveru, jsem zkusil napsat vlastní script pro jiný web : include ('config/config.php'); function __autoload($class){ echo ("Autoload zavolána"); if (!class_exist($class,false)){ include (_ROOT_CLASS_DIR_.'/'.$class.'.php'); }; }; MySQL::Dalsi(); include (_ROOT_DIR_.'/header.php'); $smarty->display('to_je.tpl'); Jde o to, že v kódu výše, ve chvíly kdy se pokouším pracovat se třídou MySQL::Dalsi(); by se měla zavolat funkce __autoload. Nic se nestalo, stránka mi vypisuje, že třída MySQL neexistuje. Kontroloval jsem tedy cesty pro includování souboru v __autoload, jestli jsem tam neudělal chybu. Podle všeho ne, ale znáte to, přehlídnout jsem mohl cokoli. Proto jsem do __autoload umístil řádek echo("Autoload zavolána");, což by mi mělo minimálně na stránku vypsat, kdykoli bude tato funkce zavolána použitím neexistující třídy. Bohužel se nic nestane, tudíš mi připadá, jako by systém funkci __autoload ignoroval. Ptám se tedy, v čem jsem mohl udělat chybu? Děkuji Lokutus7323 |
||
Tori Profil |
#2 · Zasláno: 18. 3. 2011, 01:48:53 · Upravil/a: Tori
if (!class_exists($class,false)){ |
||
Jan Tvrdík Profil |
#3 · Zasláno: 18. 3. 2011, 02:07:22
Nepoužíváš tu třídu
MySQL už v tom configu? Zkus definici té funkce přesunout nad vkládání config.php .
Jaký význam má mít to volání if (!class_exist($class,false)) {...} ? Když se přece volá __autoload , tak je jasné, že ta třída neexistuje, ne?
|
||
Lokutus7323 Profil * |
#4 · Zasláno: 18. 3. 2011, 10:43:58
Ahoj,
asi jsme se špatně pochopili. V configu třídu MySQL nepoužívám. Poprvé jí volám až v index.php, což je kód, který jsem sme dal. Chyba v cestě není, a nebo i kdyby byla, každopádně by se mi mělo na obrazovku vypsat "Autoload zavolána". Problém je, že se nevypíše, to znamená, že tato funkce není vůbec zavolána. A to je právě problém, že nevím co je s tím špatně. Měl jsem za to, že tato funkce je volána automaticky, když chci vytvořit třídu a ona neexistuje. Uváděl jsem sem, prestashop, který tuto funkci používá, abych zdůraznil, že v nastavení php.ini funkce zakázána nebude, protože funguje o složku dál(Prestashop) naprosto korektně. |
||
Jan Tvrdík Profil |
#5 · Zasláno: 18. 3. 2011, 11:54:51 · Upravil/a: Jan Tvrdík
Lokutus7323:
A udělal jsi to, co jsem po tobě chtěl? Když za definici funkce __autoload dáš exit (na 9. řádek), zmizí ten problém?
Mimochodem, za if a za tělem funkce se středník nepíše.
|
||
blaaablaaa Profil |
#6 · Zasláno: 18. 3. 2011, 11:55:39
Lokutus7323:
Vidim, ze pouzivas smarty, zkus nasledujici kod: function autoload($class) { if ( file_exists("classes/class.".strtolower($class).".php")) require_once("classes/class.".strtolower($class).".php"); } spl_autoload_register("autoload"); |
||
Časová prodleva: 13 let
|
0