Autor Zpráva
stepanka
Profil *
Ahoj,

prosím, dá se nějak zrušit zavolaná třída, aby mohla být zavolána znovu a neobjevovalo se mi to chybové hlášení?

Resp. mám tuto třídu:

class Kalendar
{
        function vratURLkeKalendari($jazyk)
	{
		global $jeViceJazyku;
		
		include "./class/class_strom.php";
		$strom = new Strom();
		
		$id_stranka = $this->vratIDstrankySkalendarem($jazyk);
		if ($id_stranka != 0)
		{
			něco dělej ...
		} 
		else
			return '';
	}
}


Jenže když pak v jiném skriptu mám:

include "./class/class_kalendar.php";
$kalendar = new Kalendar();
$guery = SELECT z databáze... ;
while ($row = mysql_fetch_array($query))
   {
   echo $kalendar->vratURLkeKalendari($_SESSION['page_lang']);
   }



Tak mi to vypisuje tento fatal error (Fatal error: Cannot redeclare class Strom) :-( Jak se z toho dá vycouvat? Do té třídy Kalendar moc kopat nechci...

Děkuju.
perun
Profil
1. dať include pred definíciu triedy
include "./class/class_strom.php";

class Kalendar
{
        function vratURLkeKalendari($jazyk)
    {
        global $jeViceJazyku;
        
        $strom = new Strom();


2. alebo použiť include_once
include_once "./class/class_strom.php";
stepanka
Profil *
perun

Jéé ty si zlatý člověk, děkuju! :-)
Lamicz
Profil
stepanka: Kdyz to uz pises v OOP, mrkni na autoloading. Je to velky ulehceni ;). V praxi se to dela napr. tak, ze nazev tridy bude:
class Engine_Database {}

A bude umisten v 'engine/database.php'.
function __autoload($what){
	if(strpos($what, '_')){
		require_once 'includes/'.str_replace('_', '/', strtolower($what)).'.php';
	}
}

Akorat se nahradi '_' za '/' a tim urcis umisteni ;)
Pak se nemusis nikde starat co bylo nebo nebylo includovano za tridy. V cele aplikaci nemas jediny include.
Na tomto principu je tvorena vetsina frameworku pro PHP 5 (nekdy se pouziva slozitejsi nacitani pres parsovani URL jako MVC, potom je tato fce soucasti nejake tridy, vetsinou Router).

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: