Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP/OOP][PHP/OOP] Jak wywołać metody klasy agregowanej poza klasą?
padalec83
post 20.06.2007, 14:17:06
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 9.02.2006

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


Witajcie!!
Chyba najłatwiej bedzie jak pokaze kod php:
  1. <?php 
  2. class DbAccess 
  3. { 
  4.  
  5. static private $self= null; 
  6.  
  7. private $con; 
  8.  
  9. protected function __construct() 
  10. { 
  11. $sDSN=array( 
  12. 'phptype'=>DB_TYPE, 
  13. 'username'=>DB_USER, 
  14. 'password'=>DB_PASSWORD, 
  15. 'hostspec'=>DB_HOST, 
  16. 'database'=>DB_NAME, 
  17. ); 
  18. if(DB::isError($this->con=DB::connect($sDSN))) 
  19. throw new DB__Error('<b>'.str_replace('nativecode=','',$this->con->getUserInfo()).'</b>',$this->con->getCode()); 
  20. else 
  21. return $this->con;  
  22. } 
  23. static public function is_connected() 
  24. { 
  25. if(self::$self===NULL) 
  26.  self::$self = new DbAccess(); 
  27.  return self::$self; 
  28. } 
  29. } 
  30. ?>


jezeli w klasie DbAccess odowałm sie do ktorejkolwiek z metod pakietu DB jest ok mam je dostepne poprzez php:
  1. <?php 
  2.  $this->con->getOne(); 
  3. ?>

Ale jezeli chce sie odwolac do tych samych metod poza ta klasa czyli php:
  1. <?php 
  2. claass Testowa 
  3. { 
  4. public function jakas_funkcja() 
  5. { 
  6.  
  7.  $dbh=DbAccess::is_connected(); 
  8. $dbh->getOne(); 
  9.  } 
  10. } 
  11. } 
  12. ?>


php generuje mi blad ze nie ma takiej metody. W jaki sposob ma sie dostac do metod klasy nizszej??
Pozdrawiam i zgóry dziwkuje za pomoc

Ten post edytował padalec83 20.06.2007, 14:17:49


--------------------
www.silversite.pl
Go to the top of the page
+Quote Post
nospor
post 20.06.2007, 15:35:36
Post #2





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




przeciez DBAccess nie ma metody getOne(). Metodę ten posiada obiekt $con, ktory jest wlasciwoscią DbAccess. Musisz wiec pisac:
  1. <?php
  2. $dbh->con->getOne();
  3. ?>
Oczywiscie to ci nie zadziala, gdyż $con jest wlasciwoscia prywatną. Musisz zmienic na public

Cytat
zgóry dziwkuje za pomoc
Blagam, nie dziwkuj tu, bo zaraz Giertych nam forum zamknie.


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

"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
padalec83
post 21.06.2007, 07:12:54
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 9.02.2006

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


Cytat(nospor @ 20.06.2007, 14:35:36 ) *
przeciez DBAccess nie ma metody getOne(). Metodę ten posiada obiekt $con, ktory jest wlasciwoscią DbAccess. Musisz wiec pisac:
  1. <?php
  2. $dbh->con->getOne();
  3. ?>

Oczywiscie to ci nie zadziala, gdyż $con jest wlasciwoscia prywatną. Musisz zmienic na public

Dzieki wielkie, myslalem ze uda mi sie jakos to obejsc ale najwyrazniej albo bede musial wszstkie metody klasy DbAccess uczynic statycznymi, albo wlasciwosc $con zrobic publiczna i tu mam kolejne pytanie, który sposob bedzie leprzy??
PS bede uwazal zeby nie denerwowac Pan Romana biggrin.gif biggrin.gif

Ten post edytował padalec83 21.06.2007, 07:13:54


--------------------
www.silversite.pl
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: 14.08.2025 - 06:41