Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rozszerzanie klasy
Forum PHP.pl > Forum > PHP > Object-oriented programming
Yatta
Witam,

Korzystam z klasy EzSql do laczenia sie z baza MySQL.
Utworzylem swoja wlasna klase, ktora jest ekstensja klasy EzSQL - glownie po to aby dorzucic obsluge wyjatkow.
I mam kilka pytan.
Kod klasy wyglada tak:
  1. include 'ez_sql_mysql.php';
  2.  
  3. interface IException
  4. {
  5. /* Protected methods inherited from Exception class */
  6. public function getMessage(); // Exception message
  7. public function getCode(); // User-defined Exception code
  8. public function getFile(); // Source filename
  9. public function getLine(); // Source line
  10. public function getTrace(); // An array of the backtrace()
  11. public function getTraceAsString(); // Formated string of trace
  12.  
  13. /* Overrideable methods inherited from Exception class */
  14. public function __toString(); // formated string for display
  15. public function __construct($message = null, $code = 0);
  16. }
  17.  
  18. abstract class CustomException extends Exception implements IException
  19. {
  20. protected $message = 'Unknown exception'; // Exception message
  21. private $string; // Unknown
  22. protected $code = 0; // User-defined exception code
  23. protected $file; // Source filename of exception
  24. protected $line; // Source line of exception
  25. private $trace; // Unknown
  26.  
  27. public function __construct($message = null, $code = 0)
  28. {
  29. if (!$message) {
  30. throw new $this('Unknown '. get_class($this));
  31. }
  32. parent::__construct($message, $code);
  33. }
  34.  
  35. public function __toString()
  36. {
  37. return get_class($this) . " '{$this->message}' in {$this->file}({$this->line})\n"
  38. . "{$this->getTraceAsString()}";
  39. }
  40. }
  41.  
  42. class TestException extends CustomException {}
  43.  
  44. class DB Extends ezSQL_mysql{
  45. public $wiersz= '';
  46. public $wartosc='';
  47.  
  48. public function __construct(){
  49. try{
  50. include CONFIG_DIR.'db.inc';
  51. $dbuser=$CONFIG['sql_user'];
  52. $dbpassword=$CONFIG['sql_pass'];
  53. $dbname=$CONFIG['sql_dbname'];
  54. $dbhost=$CONFIG['sql_host'];
  55.  
  56.  
  57. parent::ezSQL_mysql();
  58. parent::connect($dbuser, $dbpassword, $dbhost);
  59. parent::select($dbname);
  60.  
  61. if(parent::select($dbname) == false)
  62. throw new TestException('Blad polaczenia z baza !');
  63. }
  64. catch (TestException $e) {
  65. echo "Caught TestException ('{$e->getMessage()}')\n{$e}\n";
  66. exit();
  67.  
  68. }
  69.  
  70. }
  71.  
  72. public function query_row($kod){
  73.  
  74. try{
  75. return parent::get_row($kod);
  76.  
  77. if(parent::query($kod) == false)
  78. throw new TestException('Bledne zapytanie !');
  79. }
  80. catch (TestException $e) {
  81. echo "Caught TestException ('{$e->getMessage()}')\n{$e}\n";
  82. exit();
  83.  
  84. }
  85.  
  86. }
  87.  
  88. public function query_value($kod){
  89.  
  90. try{
  91. $this->wartosc = parent::get_var($kod);
  92.  
  93. if(parent::query($kod) == false)
  94. throw new TestException('Bledne zapytanie !');
  95. }
  96. catch (TestException $e) {
  97. echo "Caught TestException ('{$e->getMessage()}')\n{$e}\n";
  98. exit();
  99.  
  100. }
  101.  
  102. }
  103.  
  104. }



Konstruktor klasy DB tworzy i sprawdza polaczenie do bazy i tu nie mam pytan.
Natomiast metody query_row i query_value wykorzystuja oryginalne metody klasy EzSQL ale sa rozszerzone o obsluge try catch. No i pytanie jak zwrocic wartosci wyciagane przez moje metody. O ile w przypadku query_value nie ma specjalnie problemu bo zwraca ona stringa, to w przypadku query_row zwraca obiekt.
Czy poprawnie jest zwrocenie obiektu przez return ? Jak to powinno poprawnie wygladac?
darko
Cytat
Czy poprawnie jest zwrocenie obiektu przez return ? Jak to powinno poprawnie wygladac?

Jak najbardziej poprawne.
Cytat
jak zwrocic wartosci wyciagane przez moje metody

Nadpisz je i zwróć dane w takiej postaci, w jakiej potrzebujesz.
Yatta
Okej,
A jezeli nie chcialbym zwracac obiektu w metodzie query_row, tylko go tam odpowiedno obrocic i dopiero zwrocic?
Przypisanie $obiekt= parent::query($kod) zwracalo mi blad.
-=Peter=-
Że tak zapytam: po co Ci interfejs IException? Sprawdzasz programistów Zenda, czy napewno się nie pomylili i zaimplementowali wszystkie metody w Exception?
darko
Cytat
A jezeli nie chcialbym zwracac obiektu w metodzie query_row, tylko go tam odpowiedno obrocic i dopiero zwrocic?

Czyli de facto też zwrócić tylko po "obróbce".
Cytat
Przypisanie $obiekt= parent::query($kod) zwracalo mi blad.

O jakiej treści ?
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.