Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/OOP][PHP/OOP] Jak wywołać metody klasy agregowanej poza klasą?
Forum PHP.pl > Forum > PHP
padalec83
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
nospor
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.
padalec83
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
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.