Portál AbcLinuxu, 15. května 2025 12:22

Dotaz: Jak na __autoload() v php

6.9.2012 16:04 JS
Jak na __autoload() v php
Přečteno: 271×
Odpovědět | Admin
Ahoj, používám na načítání class __autoload(). Co ale když bych potřeboval rozšířit hledání ještě o jeden adresář ve kterém mám další třídy? Teď hledá v document/class/ a potřebuji ještě template/class/. Poradí někdo? Děkuji
function __autoload($class){
     include_once(dirname(__FILE__).'/document/class/'.$class.'.php');
}

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (l0gik)
6.9.2012 16:38 voda | skóre: 28
Rozbalit Rozbalit vše Re: Jak na __autoload() v php
Odpovědět | | Sbalit | Link | Blokovat | Admin
Použij file-exists.
6.9.2012 17:17 l0gik | skóre: 22
Rozbalit Rozbalit vše Re: Jak na __autoload() v php
A popř. ještě class_exists, jestli může existovat soubor, ale s jinou třídou.
7.9.2012 14:39 RYU.cz | skóre: 16 | Vsetín
Rozbalit Rozbalit vše Re: Jak na __autoload() v php
Odpovědět | | Sbalit | Link | Blokovat | Admin
function load($className) 
{ 
	$possibilities = array( 
        APPLICATION_PATH.DS.'classes'.DS.'Base'.DS.$className.'.php', 
        APPLICATION_PATH.DS.'classes'.DS.'Workers'.DS.$className.'.php', 
        APPLICATION_PATH.DS.'classes'.DS.'Extensions'.DS.$className.'.php', 
    	APPLICATION_PATH.DS.$_SESSION['module'].DS.'Helpers'.DS.$className.'.php',
    ); 
    foreach ($possibilities as $file) 
    { 
        if (file_exists($file)) 
        { 
            require_once($file);
	    IsDebug::add("Creating instance of ".$className);
            return true; 
        } 
    } 
    return false; 
}
Samozřejmě je vhodné seřadit to podle pravděpodobnosti. APPLICATION_PATH je cesta k aplikaci např. /var/www/hmtl DS je DIRECTORY_SEPARATOR
Linux is like a teepee - no windows, no gates, apache inside. | RYU.cz
Josef Kufner avatar 9.9.2012 00:14 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak na __autoload() v php
Namísto require_once je lepší v tomto případě použít include nebo require, tedy variantu bez '_once'. Také je vhodné namísto funkce __autoload používat spl_autoload_register.

Funkce include sice vrací false nebo 1, podle toho jak je úspěšná, ale nedá se potlačit warning, když selže, aniž by bylo potlačeno vše uvnitř includovaného souboru, takže nezbývá, než použít to file_exists.
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.