Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Dostep do zmiennych innej klasy
Forum PHP.pl > Forum > Przedszkole
Wolfie
Witam,

Mam oto taki oto plik ktory zawiera dwie klasy Table oraz Row - jest to zalazek wzorca Active Record ale to narazie niewaznie, zreszta z tego co widze na forum nikt nie ma pojecia jak zbudowac Active Record wiec przedstwawiam plik a pozniej pytanie :

  1. <?php
  2.  
  3. require 'class.Database.php';
  4.  
  5. class Table {
  6. public $tableName;
  7. static $db;
  8.  
  9.  
  10. function find($id) {
  11. if(!$result = mysql_query("SELECT * FROM $this->tableName WHERE id='$id'")){
  12. throw new Exception('Error finding row');
  13. }
  14. $row = mysql_fetch_assoc($result);
  15. print_r($row);
  16. }
  17.  
  18. function setTableName($tableName) {
  19. return $this->tableName = $tableName;
  20. }
  21. }
  22.  
  23.  
  24. class Row {
  25.  
  26. public $token;
  27.  
  28. public function setToken($token) {
  29. return $this->token = $token;
  30. }
  31.  
  32. function insert() {
  33. if(!mysql_query("INSERT INTO $this->tableName VALUES (NULL, $this->token, 1, 0)")){
  34. throw new Exception('Error inserting row');
  35. }
  36. }
  37.  
  38. function update() {
  39. }
  40. function delete() {
  41. }
  42.  
  43. }
  44.  
  45. try {
  46.  
  47. Table::$db = new MysqlDatabase('localhost','root', 'wmateusz', 'spam');
  48.  
  49. $tabelka = new Table;
  50. $tabelka->setTableName('tokens');
  51. $tabelka->find(2);
  52. $wiersz = new Row;
  53. $wiersz->setToken('kot');
  54. $wiersz->insert();
  55.  
  56.  
  57. }
  58. catch(Exception $e){
  59. echo $e->getMessage();
  60. exit();
  61. }


No wiec mam tutaj sobie klase Table w ktorej znajduje sie metoda setTableName, i moje pytanie brzmi : co zrobic zebym nie musial w klasie Row drugi raz deklarowac metody setTableName i mial jednoczesnie dostep do ostatnio uzywanej zmiennej $tableName, zaznacze ze zrobienie klasy przodka dla tych obu klas jest niemozliwe poniewaz te klasy same beda posiadaly potomkow a z tego co wiem wielodziedziczenie w php nie jest mozliwe.......

No i moze od razu drugie pytanie :
Co zrobic zeby nie powtarzac tej linijki :

  1. Table::$db = new MysqlDatabase('localhost','root', 'wmateusz', 'spam');


Dla klasy Row.....
kriszna
Wielodziedziczenie jest wtedy, gdy potomek ma dwoje rodziców, np. klasa A dziedziczy z B i C. Możliwe jest natomiast aby klasa A dziedziczyła z B, która dziedziczy z C. Każda klasa ma wtedy jednego rodzica. Nie ma wielodziedziczenia.
Wolfie
Czyli najlepszym sposobem bedzie utworzenie rodzica ktory zawiera funkcje set dla wszystkich wartosci tabel ?
gcdreak
Jeszcze lepszym będzie utworzenie classy abstrakcyjnej
Wolfie
Nie no , jednak myslalem troche nad tym i stwierdzilem ze najlepiej bedzie jak wszystkei settery i gettery zbuduje w klasach pochodnych do klasy Row i Table, metody beda dziedziczone , zas wszystkie zmienne ktore zostana ustawione juz beda indywidualne dla kazdego potomka i dzieki temu uzyskam wlasciwy efekt
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.