Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Wywołanie klasy w konstruktorze
-etup-
post 27.06.2012, 16:58:32
Post #1





Goście







Dlaczego ten kod wyświetla taki komunikat:

Cytat
Catchable fatal error: Argument 1 passed to Theme::__construct() must be an instance of Config, none given, called in /var/www/index.php on line 8 and defined in /var/www/theme.php on line 7


index.php

  1. include_once 'config.php';
  2. include_once 'theme.php';
  3.  
  4. $test = new Theme;
  5. echo $test-> show();


theme.php

  1. class Theme
  2. {
  3. private $db;
  4.  
  5. public function __construct(Config $db)
  6. {
  7. $this->db = $db;
  8. }
  9.  
  10. public function show()
  11. {
  12. return $this->db;
  13. }
  14. }


config.php

  1. class Config
  2. {
  3. public $host;
  4. private $user;
  5. private $pswd;
  6. private $baza;
  7.  
  8.  
  9. public function __construct()
  10. {
  11. $this->host = 'host';
  12. $this->user = 'user';
  13. $this->pswd = 'password';
  14. $this->baza = 'baza';
  15. }
  16.  
  17. }


Jak to naprawić?
Go to the top of the page
+Quote Post
CTRL
post 27.06.2012, 17:01:35
Post #2





Grupa: Zarejestrowani
Postów: 133
Pomógł: 8
Dołączył: 23.09.2011
Skąd: Stromiec

Ostrzeżenie: (0%)
-----


Czy nie chodzi o to, że np. private $db; jest tylko w Theme, a w configu takiej zmiennej nie ma?


--------------------
Go to the top of the page
+Quote Post
nospor
post 27.06.2012, 17:02:45
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Przecież masz wyraźnie napisane: theme należy wywołać z parametrem a ty wywołujesz bez
MA byc:
$test = new Theme(TU OBIEKT KLASY Config);


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
-etup-
post 27.06.2012, 17:08:13
Post #4





Goście







Nie rozumiem. Chciałbym aby w klasie theme były dostępne dane Configu, to się chyba centralizacja nazywa... Po co mam wywoływać obiekt klasy config w obiekcie klasy theme? Chciałbym aby przy wywołaniu klasy theme, były już widoczne dane klasy config. Czyli po co jest opcja wywołania klasy w konstruktorze?
Go to the top of the page
+Quote Post
krzywy36
post 27.06.2012, 17:13:23
Post #5





Grupa: Zarejestrowani
Postów: 370
Pomógł: 43
Dołączył: 1.12.2007
Skąd: Kędzierzyn Koźle

Ostrzeżenie: (0%)
-----


żeby Config był dostępny w Theme musisz go tam przekazać, np. poprzez konstruktor klasy Theme (tak to robisz w tym kodzie), z tym, że, żeby to zadziałało, musisz przekazać obiekt klasy Config przy tworzeniu obiektu klasy Theme czyli zamiast:
  1. $test = new Theme;
  2. echo $test-> show();

zrób
  1. $config = new Config;
  2. $test = new Theme($config);
  3. echo $test-> show();


--------------------
pretty as a shit.
Go to the top of the page
+Quote Post
peter13135
post 27.06.2012, 17:15:18
Post #6





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


jak masz funkcję typu :

  1. function mojaSuperFunkcja($parametr)
  2. {
  3. return $parametr*2;
  4. }


to ją wywołujesz np. tak :
  1. mojaSuperFunkcja(7);


jak wywołasz ją tak :
  1. mojaSuperFunkcja();

to będzie błąd.

Czy to jest dla Ciebie zrozumiałe ?
Jeśli tak, to zauważ, że masz podobną sytuację u siebie smile.gif


Pozatym (tak już poza tym problemem) wydaje mi się, że warto taki "sterownik bazy" trzymać w singletonie, żeby się nie łączyć kilka razy z bazą i mieć dostęp do bazy w każdym miejscu skryptu.


--------------------
:)
Go to the top of the page
+Quote Post
thek
post 27.06.2012, 21:28:36
Post #7





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Peter... Albo raz utworzyć połączenie i potem obiekt połączenia wstrzykiwać gdzie jest potrzebny.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 11:15