Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: AdoDB + __construct() + dziedziczenie
Forum PHP.pl > Forum > PHP > Object-oriented programming
Aztech
Mam klasę bazową BaseClass i w niej konstruktor który inicjalizuje polaczenie z bazą za pomocą AdoDB.
Pytanie brzmi: czy jeśli dla jakiejś dowolnej klasy, która dziedziczy po BaseClass stworzę konstruktor to czy ten z BaseClass zostanie nadpisany czy też będzie wywoływany tak aby nie musieć jeszcze raz inicjalizować połaczenia z AdoDb?
Czy wywołania $this->doSQL(); w metodach createForumSQL(), updateForumSQL() wykonają się poprawnie (tzn czy będzie utrzymane połaczenie z bazą?)

Za szybką i rzeczową odpowiedź z góry dziękuję

Poniżej listingi:
baseclass.php
  1. <?php
  2.  
  3. #includy
  4. include("./includes/errors.inc.php");
  5. require_once("../core/adodb/adodb.inc.php");
  6.  
  7.  
  8. #klasy błędów
  9. class SqlException extends Exception {};
  10.  
  11. /**
  12.  * Klasa bazowa dla wszystkich klas
  13.  *
  14.  */
  15.  
  16. class BaseClass {
  17.  
  18.  
  19. /**
  20.    * Połaczenie z bazą danych
  21.    *
  22.    * @var unknown_type
  23.    * @access private
  24.    */
  25. private $db;
  26.  
  27. /**
  28.    * Wynik zapytania
  29.    *
  30.    * @var unknown_type
  31.    * @access private  
  32.    */
  33.  
  34. private $result;
  35.  
  36. /**
  37.    * Zapytanie do bazy
  38.    *
  39.    * @var string
  40.    * @access private
  41.    */
  42.  
  43. private $sql;
  44.  
  45. /**
  46.    * Konstruktor
  47.    *
  48.    * @param array $rbx_db
  49.    * @access public
  50.    */
  51.  
  52. public function __construct($rbx_db){
  53.  
  54. # połącz z bazą
  55. $this->db = NewADOConnection("mysql");
  56.  
  57. # raportuj wszystkie błędy z AdoDB
  58. $this->db->debug = true;
  59.  
  60. # raportuj wszysrkie błedy z php 
  61.  
  62. # połącz z bazą
  63. $this->db->Connect($rbx_db['host'], $rbx_db['user'], $rbx_db['pass'], $rbx_db['name']);
  64. }
  65.  
  66.  
  67. /**
  68.    * Zwróc obiekt połączenia z bazą
  69.    *
  70.    * @return unknown
  71.    * @access public
  72.    */
  73.  
  74. public function getDB(){
  75. return $this->db;
  76. }
  77.  
  78. /*
  79.    * Zwróc rezultat zapytania
  80.    *
  81.    * @return unknown
  82.    * @access public
  83.    */
  84.  
  85. public function getResult(){
  86. return $this->result;
  87. }
  88.  
  89.  
  90. /**
  91.    * Ustaw zapytanie sql
  92.    *
  93.    * @param string $sql
  94.    * @access public  
  95.    */
  96.  
  97. public function setSql(string $sql) {
  98. $this->sql = $sql;
  99. }
  100.  
  101.  
  102. /**
  103.    * Zwróć treść zapytania
  104.    *  
  105.    * @return string $sql
  106.    */
  107. public function getSql() {
  108. return $this->sql;
  109. }
  110.  
  111. /**
  112.    * Zwróć wyjątek jeśli rezultat zapytania jest pusty
  113.    * 
  114.    * @return true jeśli wynik zapytania jest poprawny
  115.    * @throws SQL_EXECUTE_ERROR jeśli w wyniku zapytania nie uzyskano poprawnego wy
    niku
  116.    * @access public
  117.    */
  118. public function checkResult() {
  119. if ($this->result = EOF) throw new SqlException(SQL_EXECUTE_ERROR);
  120. else return true;
  121. }
  122.  
  123. /**
  124.    * Wywołanie zapytanie SQL
  125.    *
  126.    * @param string $sql zapytanie SQL
  127.    * @access public
  128.    */
  129. public function executeSQL (string $sql){
  130. #gdy nie podano zapytania sql wywołaj odmyślnie zapytanie SQL
  131. if(empty($sql)) $newsql = $sql; else $newsql = $this->sql;
  132. $this->result = $this->db->Execute($newsql);
  133. }
  134.  
  135. /**
  136.    * Wywołanie wszytkich metod związanych z wykonaniem zapytanie w jednej funkcji
  137.    *
  138.    * @param string $sql
  139.    * @access public
  140.    */
  141.  
  142. public function doSQL($sql){
  143.  $this->executeSQL($sql);
  144.  $this->checkResult();
  145. }
  146.  
  147. }
  148.  
  149. ?>


forum.php
  1. <?php
  2.  
  3. include("./includes/errors.inc.php");
  4. include("./classes/baseclass/php");
  5. /**
  6.  * Klasa błędów konstruktora klasy Forum
  7.  *
  8.  */
  9.  
  10. class ForumException extends Exception {};
  11.  
  12. /**
  13.    * Klasa obsługi forum 
  14.    **/
  15.  
  16. class Forum extends BaseClass {
  17. /**
  18.    * @var integer
  19.    * @access private
  20.    * Identyfikator forum
  21.    */
  22. private $forum_id = -1;
  23. /**
  24.    * @var array
  25.    * @access private
  26.    * Lista moderatorów forum
  27.    */
  28. private $moderators = array();
  29. /**
  30.    * @var integer
  31.    * @access private
  32.    * Założyciel forum
  33.    */
  34. private $owner_id = -1;  // założyciel forum
  35.  
  36. /**#@+
  37.    * @var string
  38.    * @access private
  39.    */
  40. /**
  41.    * Tytuł (nazwa) forum
  42.    */
  43. private $title = "";
  44. /**
  45.    * Opis forum
  46.    */
  47. private $description = "";
  48. /**
  49.    * Ilość postów umieszczonych na forum
  50.    */
  51. private $forum_posts = "";
  52. /**
  53.    * Ilość tematów umieszczona na forum
  54.    */
  55. private $forum_topics = "";
  56. /**
  57.    * Słowa kluczowe potrzebne do kategoryzowania forów
  58.    */
  59. private $key_words = "";
  60. /**#@-*/
  61.  
  62. /**
  63.    * Konstruktor
  64.    *
  65.    * Ustawienie obiektu połączenia z bazą danych, inicjalizuje wartości początkowe
     prywatnych pól wartościami domyślnymi
  66.    * 
  67.    * @param int $forum_id Identyfikuje forum
  68.    * @param string $title Zawiera tytuł forum
  69.    * @param int $owner_id Identyfikuje właściciela forum
  70.    * @access public
  71.    * @throws ForumException
  72.    **/  
  73.  
  74. public function __construct(int $forum_id, string $title, int $owner_id) {
  75.  
  76. if (empty($forum_id)) throw new ForumException(CFE_EMPTY_FORUM_ID);
  77. elseif (empty($title)) throw new ForumException(CFE_EMPTY_TITLE);
  78. elseif (empty($owner_id)) throw new Forum(CFE_EMPTY_OWNER_ID);
  79. else {
  80. $this->description = "";
  81. $this->forum_id = $forum_id;
  82. $this->forum_posts = -1;
  83. $this->forum_topics = -1;
  84. $this->key_words = "";
  85. $this->moderators = array();
  86. $this->owner_id = $owner_id;
  87. $this->title = $title;
  88. }
  89. }  
  90.  
  91. /**
  92.    * Przypisuje identyfikator forum
  93.    * 
  94.    * @access public
  95.    * @param id Wartość przypisywana identyfikatora
  96.    * @return true 
  97.    * @throws IllegalDataException 
  98.    **/
  99.  
  100. public function setForumId($id){
  101.  
  102. #sprawdz czy wartość zmiennej nie jest pusta oraz czy jest typu integer
  103. if (empty($id)) throw new IllegalDataException(SVE_EMPTY_FORUM_ID);
  104. elseif (!is_int($id)) throw new IllegalDataException(ITE_INTEGER);
  105. else {
  106. #gdy spełnione warunki zapisz zmienna
  107. $this->forum_id = $id;
  108. return true;
  109. }
  110. }
  111.  
  112.  
  113. /**
  114.    * Przypisuje właściela do forum
  115.    * 
  116.    * @access public
  117.    * @param id id właścieciela forum
  118.    * @return true 
  119.    * @throws IllegalDataException 
  120.    **/
  121.  
  122. public function setOwnerId($id){
  123.  
  124. #sprawdz czy wartość zmiennej nie jest pusta oraz czy jest typu integer
  125. if (empty($id)) throw new IllegalDataException(SVE_EMPTY_OWNER_ID);
  126. elseif (!is_int($id)) throw new IllegalDataException(ITE_INTEGER);
  127. else {
  128. #gdy spełnione warunki zapisz zmienna
  129. $this->owner_id = $id;
  130. return true;
  131. }
  132. }
  133.  
  134. /**
  135.    * Ustawia tytuł (nazwę) forum
  136.    * 
  137.    * @access public
  138.    * @param value Nowo nadawany tytuł forum
  139.    * @return true 
  140.    * @throws IllegalDataException 
  141.    **/
  142.  
  143. public function setTitle($value){
  144.  
  145. #sprawdz czy wartość zmiennej nie jest pusta oraz czy jest typu integer
  146. if (empty($value)) throw new IllegalDataException(SVE_EMPTY_OWNER_ID);
  147. elseif (!is_int($value)) throw new IllegalDataException(ITE_INTEGER);
  148. else {
  149. #gdy spełnione warunki zapisz zmienna
  150. $this->title = $value;
  151. return true;
  152. }
  153. }
  154.  
  155. /**
  156.    * Ustawia opis forum
  157.    * 
  158.    * @access public
  159.    * @param value Nowo nadawany opis forum  
  160.    **/
  161.  
  162. public function setDescription($value=""){
  163. $this->description = $value;
  164. }
  165.  
  166. /**
  167.    * Ustawia aktualną ilość postów znajdujących się na forum
  168.    *
  169.    * @access public
  170.    * @param value Ilość aktualnych postów na forum  
  171.    **/
  172.  
  173. public function setForumPostNum($value=""){
  174. $this->forum_posts = $value;
  175. }
  176.  
  177. /**
  178.    * Zwiększa o jeden aktualna ilość postów
  179.    *
  180.    * @access public  
  181.    **/
  182.  
  183. public function incForumPostNum(){
  184. $this->forum_posts++;
  185. }
  186.  
  187. /**
  188.    * Zmniejsza o jeden aktualna ilość postów
  189.    *
  190.    * @access public  
  191.    **/
  192.  
  193. public function decForumPostNum(){
  194. #zabezpieczenie przed tym by nie zmieniać liczy postów na ujemną
  195. if ($this->forum_posts != 0) $this->forum_posts--;
  196. }
  197.  
  198. /**
  199.    * Ustawia aktualną ilość wątków znajdujących się na forum
  200.    *
  201.    * @access public
  202.    * @param value Ilość aktualnych wątków na forum  
  203.    **/
  204. public function setForumTopicNum($value=""){
  205. $this->forum_topics = $value;
  206. }
  207.  
  208. /**
  209.    * Zwiększa o jeden aktualna ilość wątków (tematów)
  210.    *
  211.    * @access public  
  212.    **/
  213.  
  214. public function incForumTopicNum(){
  215. $this->forum_topics++;
  216. }
  217.  
  218. /**
  219.    * Zmniejsza o jeden aktualna ilość wątków (tematów)
  220.    *
  221.    * @access public  
  222.    **/
  223.  
  224. public function decForumTopicNum(){
  225. #zabezpieczenie przed tym by nie zmieniać liczy postów na ujemną
  226. if ($this->forum_topics != 0) $this->forum_topics--;
  227. }
  228.  
  229. /**
  230.    * Tworzy forum
  231.    *
  232.    * @access public
  233.    * @param id Identyfikator forum
  234.    * @param owner_id iIdentyfikator moderatora forum (
  235.    * @throws IllegalDataException
  236.    **/
  237.  
  238. public function createForumSQL($id, $owner_id){
  239. if (empty($id)) throw new IllegalDataException(CFE_EMPTY_FORUM_ID);
  240. elseif (empty($owner_id)) throw new IllegalDataException(CFE_EMPTY_OWNER_ID);
  241. elseif (!is_int($id)) throw new IllegalDataException(ITE_INTEGER);
  242. elseif (!is_int($owner_id)) throw new IllegalDataException(ITE_INTEGER);
  243. else {
  244. $this->setSql("INSERT INTO rbx_forums"
  245. ." (id_forums, title, description, owner_id, forum_posts, forum_topics, key_wor
    ds)"
  246. ." VALUES (".$id.", ".$this->title.", ".$this->description.","
  247. ." ".$this->owner_id.", ".$this->forum_posts.", ".$this->forum_topics.", ".$this->key_words.")");
  248. $this->doSQL();
  249. }
  250. } 
  251.  
  252. /**
  253.    * Uaktualnia dane o forum
  254.    *
  255.    * @access public  
  256.    * @param $id Identyfikator forum
  257.    * @throws IllegalDataException
  258.    **/
  259.  
  260. public function updateForumSQL($id) {
  261. #sprawdz czy ustawiony jest id forum który będzie aktualizowany
  262. if (empty($this->forum_id) && empty($id)) throw new IllegalDataException(CFE_EMPTY_FORUM_ID);
  263. else {
  264. if (empty($this->forum_id)) $newid=$id; else $newid=$this->forum_id;
  265. $this->setSql("UPDATE rbx_forums"
  266. ." SET"
  267. ." title = ".$this->title.","
  268. ." description = ".$this->description.","
  269. ." owner_id = ".$this->owner_id.","
  270. ." forum_posts = ".$this->forum_posts.","
  271. ." forum_topics = ".$this->forum_topics.","
  272. ." key_words = ".$this->key_words.","
  273. ." WHERE id_forums = ".$newid
  274. ." LIMIT 1");
  275. $this->doSQL();
  276. }
  277. }
  278.  
  279. /**
  280.    * Usuwa forum na którym aktualnie operujemy
  281.    *
  282.    * @access public
  283.    * @throws SQLException
  284.    * @throws IllegalDataException  
  285.    **/
  286.  
  287.  
  288. public function deleteCurrentForumSQL(){
  289. if (empty($this->forum_id)) throw new IllegalDataException(CFE_EMPTY_FORUM_ID);
  290. else {
  291. $this->setSql("delete from rbx_forums"
  292. ."WHERE id_forums=".$this->forum_id);
  293. $this->doSQL();
  294. }
  295. }
  296.  
  297. /**
  298.    * Usuwa forum
  299.    *
  300.    * @access public
  301.    * @param id Identyfikator forum do usunięcia
  302.    * @throws SQLException
  303.    * @throws IllegalDataException  
  304.    **/
  305.  
  306. public function deleteForumSQL($id){
  307. if (empty($id)) throw new IllegalDataException(CFE_EMPTY_FORUM_ID);
  308. else {
  309. $this->setSql("delete from rbx_forums"
  310. ."WHERE id_forums=".$id);
  311. $this->doSQL();
  312. }
  313. }
  314.  
  315. /**
  316.    * Zwraca identyfikator forum
  317.    *
  318.    * @return forum_id identyfikator forum
  319.    */
  320.  
  321. public function getForumId(){
  322. return $this->forum_id;  
  323. }
  324.  
  325. /**
  326.    * Zwraca identyfikator właściciela forum
  327.    *
  328.    * @return owner_id
  329.    */
  330.  
  331.  
  332. /**
  333.    * Zwraca identyfialtor właściciela forum
  334.    *
  335.    * @return owner_id
  336.    */
  337. public function getOwnerId(){
  338. return $this->owner_id;
  339. }
  340.  
  341. /**
  342.    * Zwraca tyttuł forum
  343.    *
  344.    * @return title
  345.    */
  346.  
  347. public function getTitle(){
  348. return $this->title;
  349. }
  350.  
  351. /**
  352.    * Zwraca opis forum
  353.    *
  354.    * @return description
  355.    */
  356. public function getDescription(){
  357. return $this->description;
  358. }
  359.  
  360. /**
  361.    * Zwraca ilość postów na forum
  362.    *
  363.    * @return forum_posts
  364.    */
  365. public function getForumPostNum(){
  366. return $this->forum_posts;
  367. }
  368.  
  369.  
  370.  
  371. /**
  372.    * Zwraca ilość tematów na forum
  373.    *
  374.    * @return forum_topics
  375.    */
  376.  
  377. public function getForumTopicNum(){
  378. return $this->forum_topics;
  379. }
  380.  
  381. /**
  382.    * @todo public function addModerator($id);  //dodawanie moderetora
  383.    * @todo public function deleteModerator($id); //usuwanie moderatora
  384.    * @todo public function getModeratorList(); //zwracanie listy moderatorów
  385.    * @todo public function getKeyWords();  //zwraca listę słów kluczowych
  386.    * @todo public function setKeyWords($array);  //dodawanie słów kluczowych
  387.    * @todo public function deleteKeyWords($key); //usuwanie jednego ze słów kluczowych
  388.    * @todo public function clearKeyWords();  //usuwa wszystkie słowa kluczowe
  389.    * @todo public function clearModeratorList(); //usuwa wszystkich moderatorów  
  390.    * @todo wymyślić sposób na imlementację usuwania subforum, gdy usuwane jest for
    um główne
  391.    */
  392.  
  393. }
  394.  
  395. ?>
mike
1. 400 linii zbędnego kodu. Po co wstawiłeś kod pliku forum.php?
2. Szybciej byś sprawdził niż czekał na odpowiedź tongue.gif
3. W konstruktorze klasy dziedziczącej zrób tak:
  1. <?php
  2.  
  3. class Klasa extends BaseClass
  4. {
  5. public function __construct()
  6. {
  7. // zmienną $rbx_db możesz przekazać do konstruktora klasy dzie
  8. // dziczącej jako paramert, lub utworzyć ją wewnątrz
  9.  
  10. parent::__construct( $rbx_db );
  11.  
  12. // inne operacje
  13. }
  14.  
  15. // ...
  16. }
  17.  
  18. ?>
Aztech
Ad1. Jako przykład klasy dziedziczącej
Ad2. W takim razie wątek do usunięcia jeśli ma byź zbędny
Ad3. Dzieki wielkie

----edit----
Przykład przykładem, ale po kiego cała klasa? Jeszcze żeby była mała.
Zostaw tylko konstruktor, przecież nie musisz pokazywać całej, jeśli mowa tylo o konstruktorach.
Jeszcze tylko brakuje tu kodu AdoDB tongue.gif
~mike_mech
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.