Autor Zpráva
Lokutus7323
Profil *
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
 if (!class_exists($class,false)){
Pokud to byl překlep a u sebe to máte správně, hledejte chybu v cestě.
Jan Tvrdík
Profil
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 *
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
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
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");

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: