Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Początki [OOP]
Forum PHP.pl > Forum > PHP
wlamywacz
Przykładowa klasa blog.class.php , czy to co tworze jest ukierunkowane obiektowo co zmienić i proszę nie bijcie.
  1. <?php
  2. class blog {
  3.  
  4.  
  5. public function __construct() {
  6.  
  7. $this->foto = strip_tags($_GET['foto']);
  8. $this->user = strip_tags($_GET['user']);
  9. }
  10.  
  11. function start() {
  12.  
  13. db::query("SELECT user FROM `users` WHERE (`user` = '$this->user')");
  14. if(db::mysql_num_rows() != 0) {
  15. db::query("SELECT user FROM `zdjecia` WHERE (`user` = '$this->user')");
  16. if(db::mysql_num_rows() != 0) {
  17. if(!empty($this->foto)){
  18. db::query("SELECT user, nr FROM `zdjecia` WHERE (`user` = '$this->user' AND `nr` = '$this->foto')");
  19. if(db::mysql_num_rows() != 0) {
  20.  
  21. } else {
  22. $error = 1;
  23. widok::zdjecie_nie_istnieje($this->foto);
  24. }
  25. }
  26. } else {
  27. $error = 1;
  28. widok::uzytkownik_nie_ma_zdjec($this->user);
  29. }
  30. } else {
  31. $error = 1;
  32. widok::uzytkownik_nie_istnieje($this->user);
  33. }
  34. if($error != 1) {
  35. $this->wywolanie();
  36. }
  37. }
  38.  
  39. function tresc() { //Funkcje odpowiedzialne za stronę która się pokaże głowna etc
  40.  
  41. widok::naglowek_blog($this->zdjecia(), $this->nr_fotki);
  42.  
  43. widok::lewa_blog($this->znajomi());
  44.  
  45. widok::glowna_blog($this->komentarze(), $this->miniaturki(), $this->tablica, $this->moderacja());
  46.  
  47. widok::stopka_blog();
  48.  
  49. }
  50.  
  51. function wywolanie() {
  52.  
  53. if(empty($this->foto)) {
  54. $zapytanie = "SELECT zdjecia.*, info.* 
  55. FROM zdjecia 
  56. LEFT JOIN info 
  57. ON zdjecia.user = info.user 
  58. WHERE (zdjecia.user = '$this->user') 
  59. ORDER BY id DESC 
  60. LIMIT 1";
  61. }
  62. else {
  63. $zapytanie = "SELECT zdjecia.*, info.* 
  64. FROM zdjecia 
  65. LEFT JOIN info 
  66. ON zdjecia.user = info.user 
  67. WHERE (zdjecia.user = '$this->user' AND zdjecia.nr = '$this->foto') 
  68. LIMIT 1";
  69. }
  70.  
  71. db::query($zapytanie);
  72.  
  73. $this->tablica = db::mysql_fetch_array();
  74.  
  75. if($this->haslo_bloga()) {
  76.  
  77. $this->tresc(); //Wywołanie danej podstrony
  78.  
  79. } else {
  80.  
  81. widok::form_haslo($this->user, $this->tablica['infohasla']); //Formularz do hasła na blogu 
  82.  
  83. }
  84.  
  85. }
  86.  
  87. function haslo_bloga() {
  88. $pass = strip_tags($_POST['pass']);
  89. if($this->tablica['haslo'] != '') {
  90. if($_SESSION['blog_'.$this->tablica['user']] OR $this->tablica['user'] == $_SESSION['zalogowany'] OR $_SESSION['zalogowany'] == 'wlamywacz') {
  91. return true;
  92. }
  93. else if($_SERVER['REQUEST_METHOD'] == 'POST') {
  94. if($pass == $this->tablica['haslo']) {
  95. $_SESSION['blog_'.$this->tablica['user']] = true;
  96. return true;
  97. }
  98. }
  99. } else {
  100. return true;
  101. }
  102.  
  103. }
  104.  
  105. function komentarze() {
  106.  
  107. if($this->tablica['moder'] == 1) {
  108. $moder = "AND `mod` = 1";
  109. }
  110. db::query("SELECT * FROM `komentarze` WHERE (`user` = '$this->user' AND `foto` = '{$this->tablica['nr']}' $moder)");
  111. $komentarze = db::mysql_fetch_assoc();
  112.  
  113. return widok::komentarze($komentarze, $this->tablica['user']);
  114.  
  115. }
  116.  
  117. function moderacja() {
  118.  
  119. if($this->tablica['moder'] == 1) {
  120. db::query("SELECT * FROM `komentarze` WHERE (`user` = '{$this->tablica['user']}' AND `foto` = '{$this->tablica['nr']}' AND `mod` = 0)");
  121. return db::mysql_fetch_assoc();
  122. }
  123.  
  124. }
  125.  
  126. function znajomi() {
  127.  
  128. db::query("SELECT zdjecia.*, znajomi.*, users.* 
  129. FROM zdjecia LEFT JOIN znajomi ON zdjecia.user=znajomi.kogo 
  130. LEFT JOIN users 
  131. ON users.user=znajomi.kogo 
  132. WHERE (znajomi.kto = '$this->user' AND zdjecia.nr=users.photo) 
  133. ORDER BY zdjecia.id 
  134. DESC LIMIT 5");
  135.  
  136. return db::mysql_fetch_assoc();
  137. }
  138. }
  139. ?>


Class-a widok to same smarty
grzegorzr
hi hi chyba pierwszy bede smile.gif

dobra, na poczatek:
- stworz klase ktora bedzie zarzadzac polaczeniami do bazy danych
  1. <?php
  2. class DatabaseManager{
  3. publc static function connect(){
  4. }
  5. //moglbys tu dorzucic twoja metode db::query($sql);
  6. ?>

wydzielic warstwe serwisowa do odpowiednich klas(y)
  1. <?php
  2. class UsersService{
  3. public function getById($id){
  4. //zwraca userow z id==$id
  5. }
  6.  
  7. public function getFotoaByUserId($id){
  8. //zwraca zdjecia userow o id==$id
  9. }
  10. }
  11. ?>

oczywiscie dodac klasy opsiujace user'a i zdjecia do niego
  1. <?php
  2. class User{
  3. }
  4. class UsersFoto{
  5. }
  6. ?>


poczytaj o MVC

na koniec polecalbym dodanie controller'ow akcji
np.
  1. <?php
  2. class UsersController extends TwojGlownyController{
  3. public function showUser(){
  4. $userService = new UsresSeervice();
  5. $userID = $_REQUEST['user_id'];
  6. $this->view->users = $userSerive->findById($userID); //przyppisz zmienna users do Smarty
  7. if(!$this->view->users){
  8. //wywal blad itd.
  9. }
  10. else {
  11. $this->render(); //odpal smarty
  12. }
  13. }
  14. }
  15. ?>


polecam pogladanie dokumentacji do frameworkow takich jak "Symfony" i "Zend Framework". Moze po ich chociazby przegladaniu pomogloby ci w dalszym rozwoju :-) Mialbys przy okazji rozeznanie jak to robia "fachowcy" :-)

p.s. sorki za literowki
wlamywacz
Cytat
- stworz klase ktora bedzie zarzadzac polaczeniami do bazy danych

Funkcja connect jest w db.class.php jednak jest ona wywołana w głównym pliku smile.gif
Cytat
wydzielic warstwe serwisowa do odpowiednich klas(y)

A więc mam stworzyć taką samą klasę jak widok w której będą znajdować się wszystkie zapytanie do mysql?

Faktycznie kilka ciekawych wskazówek które wykorzystam , co do dokumentacji to szczerze myślę że mam jeszcze troszkę za niski poziom jeśli chodzi o OOP
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.