Autor | Zpráva | ||
---|---|---|---|
stepanka Profil * |
#1 · Zasláno: 12. 8. 2009, 15:58:04
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 |
#2 · Zasláno: 12. 8. 2009, 16:03:18
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 * |
#3 · Zasláno: 12. 8. 2009, 16:07:26
perun
Jéé ty si zlatý člověk, děkuju! :-) |
||
Lamicz Profil |
#4 · Zasláno: 15. 8. 2009, 03:05:16
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). |
||
Časová prodleva: 15 let
|
0