Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP OOB] Czy to jest już programowanie obiektowe?
Forum PHP.pl > Forum > PHP
Dominik137
Witam, od dłuższego czasu próbuje zrozumieć istotę pisania obiektowo i idzie to dosyć topornie. Prosiłbym o wypowiedź (ocenę) doświadczonych programistów z tego zakresu. Zamieszczam przykładową klasę, którą napisałem (przechowuje tymczasowe dane w bazie np. dla operacji z potwierdzeniem...połączenie idei plików tymczasowych, rejestru windows i śmietnika..)
  1. <?php
  2. /**
  3.  * TMP CLASS
  4.  * @package Ecrosio
  5.  * @author Dominik Zawadzki
  6.  */
  7.  
  8. /**
  9.  * Klasa TMP
  10.  *
  11.  * do przechowywania tymczasowych danych w bazie
  12.  * @package Ecrosio
  13.  * @author Dominik Zawadzki
  14.  * @copyright 2013 GNU GENERAL PUBLIC LICENSE
  15.  */
  16. class tmp {
  17.  
  18. /**
  19.   * Uchwyt do bazy ecrosio
  20. * @access private
  21.   * @var db
  22.   */
  23. private $db;
  24. /**
  25.   * nazwa modulu
  26.   * @access private
  27. * @var string
  28.   */
  29. private $module;
  30.  
  31. public function __construct($db,$name) {
  32. $this->db = $db;
  33. $this->module = $name;
  34. }
  35.  
  36. /**
  37. * Funkcja dodajaca wartosc do bazy
  38. *
  39. * Jesli parametr name wystepuje juz w bazie funkcja doda wartosc ponownie ale ze zmieniona nazwa. Funkcja maksymalnie 50 razy moze zmieniac nazwe.
  40. *
  41. * @access public
  42. * @param string name Nazwa klucza
  43. * @param string value Wartosc klucza
  44. * @param date termin Data po ktorej zostanie klucz usuniety (jesli nie podano system skasuje wg. wlasnego uznania) format rrrr-mm-dd
  45. * @return bool|string true w przypadku powodzenia, false w przybadku bledu zapisu lub nazwy lub String z nazwa zmieniona klucza, gdy funkcja bedzie musiala zmienic nazwe klucza
  46. */
  47. public function add($name,$value,$termin='',$alt=false) {
  48.  
  49. $alternatywa = '';
  50.  
  51. if($this->select($name) == TRUE) { //istnieje juz klucz o podanej nazwie
  52.  
  53. static $counter = 0;
  54. $counter++;
  55.  
  56. if($counter > 50) { //ochrona stosu
  57. return false;
  58. }
  59.  
  60. $alternatywa = $name.$counter;
  61. $odp = $this->add($alternatywa,$value,$termin,true);
  62. if($odp !== FALSE)
  63. return $odp;
  64.  
  65. }else{
  66. $add = $this->db->prepare("INSERT INTO tmp VALUES ('',:file,:name,:value,now(),:termin)");
  67. $add->bindValue(':file',$this->module);
  68. $add->bindValue(':name',$name);
  69. $add->bindValue(':value',$value);
  70. $add->bindValue(':termin',$termin);
  71. $response = $add->execute();
  72. if($alt) return $name;
  73. if($response == 1) return true; else return false;
  74. }
  75. }
  76.  
  77. /**
  78. * Funkcja zwracajaca wartosc klucza lub zwracajaca tablice ze wszystkimi kluczami danego modulu
  79. *
  80. * W przypadku braku podania nazwy klucza, funkcja zwroci wszystkie klucze danego modulu
  81. *
  82. * @access public
  83. * @param string $name Nazwa klucza (nieobowiazkowy)
  84. * @return Bool|String|Array Zwroci false w przypadu bledu, string gdy podano nazwe klucza i znaleziono wartosc, Array w przypadku gdy nie podano nazwy klucza a funkcja znalazla wszystkie rekordy kluczy danego modulu
  85. */
  86. public function select($name='') {
  87.  
  88. if($name != '') {
  89.  
  90. $select = $this->db->prepare("SELECT value FROM tmp WHERE ( file=:file AND name=:name)");
  91. $select->bindValue(':name',$name);
  92. $select->bindValue(':file',$this->module);
  93. $response = $select->execute();
  94.  
  95. $r = $select->fetchAll();
  96.  
  97. if(count($r) == 0) return false;
  98. return $r[0]['value'];
  99.  
  100. }else{
  101.  
  102. $select = $this->db->prepare("SELECT name, value FROM tmp WHERE file=:file");
  103. $select->bindValue(':file',$this->module);
  104. $response = $select->execute();
  105.  
  106. $r = $select->fetchAll();
  107.  
  108. if(count($r) == 0) return false;
  109.  
  110. return $r;
  111. }
  112. }
  113.  
  114. /**
  115. * Funkcja zmieniajaca wartosc klucza w bazie
  116. *
  117. * Zmienia wartosc na nowa ($value) dla klucza $name
  118. *
  119. * @access public
  120. * @param string name Nazwa klucza
  121. * @param string value Wartosc klucza
  122. * @return bool True w przypadku sukcesu, False w przypadku bledu
  123. */
  124. public function update($name,$value) {
  125.  
  126. $update = $this->db->prepare("UPDATE tmp SET value=:value WHERE ( file=:file AND name=:name)");
  127. $update->bindValue(':name',$name);
  128. $update->bindValue(':file',$this->module);
  129. $update->bindValue(':value',$value);
  130.  
  131. $response = $update->execute();
  132.  
  133. if($response == 0) return false; else return true;
  134.  
  135. }
  136.  
  137. /**
  138. * Funkcja usuwajaca klucz
  139. *
  140. * Usuwa klucz wskazany w parametrze
  141. *
  142. * @access public
  143. * @param string name Nazwa klucza
  144. * @return bool True w przypadku sukcesu, False w przypadku bledu
  145. */
  146. public function delete($name) {
  147. $delete = $this->db->prepare("DELETE FROM tmp WHERE ( file=:file AND name=:name)");
  148. $delete->bindValue(':name',$name);
  149. $delete->bindValue(':file',$this->module);
  150.  
  151. $response = $delete->execute();
  152.  
  153. if($response == 0) return false; else return true;
  154. }
  155.  
  156. /**
  157. * Funkcja usuwajaca wszystkie klucze danego modulu
  158. *
  159. * @access public
  160. * @return bool True w przypadku sukcesu, False w przypadku bledu
  161. */
  162. public function clear() {
  163. $clear = $this->db->prepare("DELETE FROM tmp WHERE file=:file");
  164. $clear->bindValue(':file',$this->module);
  165.  
  166. $response = $clear->execute();
  167.  
  168. if($response == 0) return false; else return true;
  169. }
  170.  
  171. }
  172. ?>


czyżby na forum brakowało specjalistów z programowania w php?
phpion
Cytat(Dominik137 @ 29.01.2013, 15:10:20 ) *
czyżby na forum brakowało specjalistów z programowania w php?

Najwidoczniej tak, może zasilisz to zacne grono swoją osobą.

Co do pytania: ciężko nazwać to programowaniem obiektowym. Masz tutaj 1 klasę, ot opakowanie funkcji w metody klasy.

PS: Te linijki:
  1. if($response == 1) return true; else return false;

można zapisać dużo krócej i bardziej PRO. Pomyśl jak.
tolomei
Cytat
Czym różni się kod obiektowy od kodu proceduralnego? Najłatwiej powiedzieć, że główna różnica tkwi w obecności obiektów. Nie jest to jednak stwierdzenie ani odkrywcze, ani prawdziwe. Przecież w języku PHP obiekty mogą być z powodzeniem wykorzystywane w kodzie proceduralnym. Obecność klas i obiektów nie jest więc równoznaczna z obiektowością - nawet w językach takich jak Java, gdzie większość elementów programu to obiekty.
Jedną z kluczowych różnic pomiędzy kodem obiektowym a proceduralnym odnajdujemy w podziale odpowiedzialności. Kod proceduralny przyjmuje postać sekwencji poleceń i wywołań metod. Do obsługi różnych stanów programu wydziela się kod kontrolujący. Taki model odpowiedzialności prowokuje powielanie kodu i uściślanie zależności pomiędzy elementami projektu. W kodzie obiektowym mamy zaś do czynienia z próbą minimalizacji owych zależności przez przekładanie odpowiedzialności za różne zadania na obiekty rezydujące w systemie.

Cytat z książki "PHP Obiekty, wzorce, narzędzia" Wydanie III 2011, Matt Zandstra.

Także możesz przeczytać na wikipedii(link):
Cytat
Istnieje pewna różnica zdań co do tego, jakie cechy języków programowania czynią je obiektowymi. Powszechnie uważa się, że najważniejsze są następujące cechy:
- Abstrakcja,
- Hermetyzacja,
- Polimorfizm,
- Dziedziczenie


Obiektowość to nie cecha kawałka wyciętego kodu. Jest to cecha całości systemu.

Pozdrawiam.
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.