Výsledky 1 až 6 z 6

Téma: [PHP4] kompozice, dedicnost

  1. #1
    Senior Member
    Založen
    07.10.2002
    Bydliště
    Ostrava / Straznice
    Příspěvky
    1 133
    Vliv
    289

    Standardní [PHP4] kompozice, dedicnost

    Resim docela zajimavy problem.

    Mam dve tridy, html a sql.

    html me slouzi pro vypis hlavicky, paticky, menu, nastaveni cest apod.

    sql pro komunikaci s databazi, checkovani query apod.

    Doted jsem je pouzival ve skriptech tak, ze jsem si nejdrive vytvoril instanci html a pak instanci sql.

    V sql mam metodu, ktera zachytava chyby databaze, vypise z html hlavicku, chybu a paticku, aby to pekne vypadalo a sedelo do designu stranku a uzivateli nevypadla cela stranka pri chybe DB.

    To jsem pouzival nasledovne.

    Kód:
    	function error($error_msg) {					//vypise chybu pri vykonavani sql prikazu	
    	
    		global $html;
    			
    		$html->headers();							//je nutno vypnout ob_start v html.inc.php, jinak to nebude fungovat!!
    		$html->html1();								//Aby chyba sedla do designu stranky je vypsan uvod stranky
    		echo "<div>". $error_msg ."</div>";	//Vypise typ chyby				
    		$html->html2&#40;&#41;;								//Vypsani zaveru stranky		
    		exit;
    		
    	&#125;
    Problem ale nastal, kdyz chci pouzit tridu sql uvnitr tridy html.

    Potrebuju jeste v hlavicce hrabnout do DB, takze si tam vytvorim instanci tridy sql, ale problem je, ze metoda error v sql pocita s uz vytvorenou instanci tridy html.

    Zkousel jsem kompozici, ze do konstruktoru sql jsem pridal parametr na tridu html a ten pak pouziju v sql.

    V tride html vytvorim instanci sql
    Kód:
    ....
    $sql = new sql&#40;$this&#41;;
    ...
    Kód:
    	function sql&#40;&$html_class&#41; &#123;			//konstruktor
    								
    		$this->html = &$html_class;						
    		
    		include $this->html->physical_path ."includes/config.inc.php"; 		//pripojim konfigurak
    ......
    a tady me to jeste fachci. Ale jakmile chci pouzit $this->html v jine metode tridy sql, tak me to uz nejede. Zkousel jsem to i pres dedicnost, ale s tou jsem se take nedobral vysledku.

    Napada vas, jak to muzu vyresit, podotykam opet, ze podminkou je PHP4, ne PHP5
    Intel C2D 4300, 1GB DDR2, 120GB Seagate, nVidia7600GT pasiv.

  2. #2
    Senior Member mince Avatar uživatele KtK
    Založen
    16.10.2002
    Bydliště
    Behind fuc*ing WorkTable Device (Praha zapad)
    Příspěvky
    1 709
    Vliv
    298

    Standardní

    imo je to blbe navrzeny,
    1) pokud sql ma problem, nemuze byt soucasti vystupu (v hlavicce) vysledek jeho prace.
    2) by se nemela trida SQL starat o vystup, mela by dat akorat HTML zpravu, ze je neschopna neco udelat, a na zaklade toho by mela HTML _prepsat_ obsah dokumentu chybovou hlaskou, poslat to na vystup, a zkoncit.
    Parasite lost, AKA the Girlfriend Mission:The Socka Project sleeps, lets use (her :) Durex! 1GHz in some soltek stuff, Ati rage 128, etc.. (it\'s noisy)
    IMB Thinkpad R31: celer 1.2GHz, 384M RAM, 60GB 5400rpm hitachi, i810 8MB onboard (na praci to staci ;)
    [pro archivni ucely] janina overclockerska poradna (.tar.gz, 1.1MB, otevrete si index.html v browseru podporujicim javascript a frames)

  3. #3

    Standardní

    S objekty v PHP nepracuju, ale vychazim z objektove teorie. Jestli to chapu dobre nevyresil by to navrhovy vzor Singleton?

    Resp. ze i v sql i html tride budes mit statickou metodu(typicky treba .getInstance()) ktera ti bude vracet jedinou instanci dane tridy v cele aplikaci.

    Jinak jak rika KtK, nejlepe asi navrhnout nejake komunikacni rozhrani mezi temi dvemi tridami.

  4. #4
    Senior Member
    Založen
    07.10.2002
    Bydliště
    Ostrava / Straznice
    Příspěvky
    1 133
    Vliv
    289

    Standardní

    Klidne muzu ten vystup prenechat na tride html, a bylo by to i logictejsi, ale stale to ten problem neresi.

    Pokud me tedy nastane chyba, tak se me zavola metoda error() tridy sql. Ale z te musim opet zavolat tridu html a nejakou jeji metodu, ktera me vypise hlavicku, chybove hlaseni a paticku, takze ja si musim odkaz na tuto instaci tridy html prenest do tridy sql.
    A to me prave v tuto chvili nefunguje.

    Nebo pak je jeste jedna moznost, ze budu mit nejaky priznak na chybu ve tride sql a pak po vykonani vsech sql query a jeste pred samotnym vypisem html muzu provest test.

    Kód:
         if &#40; $error_msg = $sql->error_occured&#40;&#41; &#41; $html->sql_error&#40;$error_msg&#41;;
    Ale musel bych to pripisovat do kazdeho skriptu a radeji bych to mel automatizovane.

    4jedik: singleton me nic nerika..., zkusim se na to mrknout.
    Intel C2D 4300, 1GB DDR2, 120GB Seagate, nVidia7600GT pasiv.

  5. #5
    Senior Member mince Avatar uživatele KtK
    Založen
    16.10.2002
    Bydliště
    Behind fuc*ing WorkTable Device (Praha zapad)
    Příspěvky
    1 709
    Vliv
    298

    Standardní

    singleton:
    Kód:
    class trida &#123;
    
     function & GetInstance&#40;&#41; &#123;
      static $Instance=null;
      
      if &#40; is_null &#40; $Instance &#41; &#41;
       $Instance = & new trida&#40;&#41;;
      
      return $Instance;
     &#125;
    
    &#125;
    a pak v kodu misto new trida()
    volas

    $instance_tridy = & trida::GetInstance();

    -mas pak pokazdy tutez instanci te tridy. - instancuje se jen jednou.
    Parasite lost, AKA the Girlfriend Mission:The Socka Project sleeps, lets use (her :) Durex! 1GHz in some soltek stuff, Ati rage 128, etc.. (it\'s noisy)
    IMB Thinkpad R31: celer 1.2GHz, 384M RAM, 60GB 5400rpm hitachi, i810 8MB onboard (na praci to staci ;)
    [pro archivni ucely] janina overclockerska poradna (.tar.gz, 1.1MB, otevrete si index.html v browseru podporujicim javascript a frames)

  6. #6
    Senior Member
    Založen
    07.10.2002
    Bydliště
    Ostrava / Straznice
    Příspěvky
    1 133
    Vliv
    289

    Standardní

    To vypada dobre, diky za rady.
    Intel C2D 4300, 1GB DDR2, 120GB Seagate, nVidia7600GT pasiv.

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •