Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tworzenie obiektu w __construct
Forum PHP.pl > Forum > PHP > Object-oriented programming
lukasz91
Witam, mam fragment pewnej klasy:
  1. class kernel_system{
  2. private $language;
  3. private $ini;
  4. public function __construct() {
  5. require_once 'administration/class.ConfigMagik.php';
  6. $this->ini=new ConfigMagik('administration/config.ini');
  7. }
  8. protected function pathway() {
  9. // bezwgledna sciezka dostepu
  10. return $this->ini->get('path', 'configuration_of_the_site');
  11. }
  12. ...
  13. }

I wywala mi błąd przy tworzeniu obiektu w konstruktorze:
  1. Fatal error: Call to a member function get() on a non-object in /var/www/cms/kernel/class.kernel.php on line 16
(10 linia). Natomiast gdy utworzę obiekt w metodzie pathway wszystko jest ok.
erix
No a co masz w kernelu w tej linijce?
lukasz91
Cytat(erix @ 9.02.2010, 16:32:34 ) *
No a co masz w kernelu w tej linijce?

  1. return $this->ini->get('path', 'configuration_of_the_site');
-=Peter=-
Klasa kernel_system dziedziczy po czymś? Może jest problem z widocznością składowych? Być może jeśli używasz dziedziczenia, to nadpisujesz konstruktor i obiekt konfiguracji się nie tworzy? Podaj bardziej rzeczywisty kod (oczywiście nie całość tongue.gif), bo ten kod co podałeś wygląda na poprawny.
lukasz91
Cytat(-=Peter=- @ 9.02.2010, 16:40:40 ) *
Klasa kernel_system dziedziczy po czymś? Może jest problem z widocznością składowych? Być może jeśli używasz dziedziczenia, to nadpisujesz konstruktor i obiekt konfiguracji się nie tworzy? Podaj bardziej rzeczywisty kod (oczywiście nie całość tongue.gif), bo ten kod co podałeś wygląda na poprawny.


Nie dziedziczy, klasa ta jest najwyżej w hierarchii smile.gif. Natomiast klasę tą dziedziczą pozostałe komponenty. np:
  1. <?php
  2. include_once 'class.kernel.php';
  3. include_once 'model/database.php';
  4. class staticSite extends kernel_system{
  5.  
  6. public function show() {
  7. // pokazuje statyczna postrone
  8. $model_menu=new menu_model;
  9. require_once('libs/Smarty.class.php');
  10. $smarty = new Smarty;
  11. $smarty->template_dir = $this->pathway()."templates/";
  12. $smarty->compile_dir =$this->pathway().'smarty/templates_c/';
  13. $smarty->config_dir =$this->pathway().'smarty /configs/';
  14. $smarty->cache_dir =$this->pathway().'smarty /cache/';
  15. require_once $this->pathway().'administration/class.ConfigMagik.php';
  16. $ini = new ConfigMagik($this->pathway().'administration/config.ini');
  17. if ($ini->get('friendly_url', 'configuration_of_the_site')=="yes") {
  18. $this->title=$_GET['title'];
  19. $mysql=$model_menu->getOneByShortLink($this->title);
  20. }
  21. else {
  22. $this->id=(int)$_GET['id'];
  23. $mysql=$model_menu->getOne($this->id);
  24. }
  25. while ($row = mysql_fetch_array($mysql)) {
  26. $dane[] = $row;
  27. }
  28. $smarty->assign('static', $dane);
  29. $smarty->display('static.tpl');
  30. }
  31. }
  32. ?>


Ps. Wiem, że tu jest namieszane trochę, ale właśnie chcę to uporządkować tongue.gif
darko
A w klasach wyprowadzonych wywołujesz konstruktor klasy nadrzędnej ?
lukasz91
Cytat(darko @ 9.02.2010, 16:50:02 ) *
A w klasach wyprowadzonych wywołujesz konstruktor klasy nadrzędnej ?

Nie. Wszędzie podobnie jest jak w klasie staticSite
thek
To dodaj coś takiego i sprawdź co się stanie smile.gif
  1. public function __construct() {
  2. parent::__construct();
  3. }

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.