Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Szybki przykład OPP?, czy uchwyciłem ducha OPP?
ed3k
post
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 30.03.2008

Ostrzeżenie: (0%)
-----


Przedstawię Wam mój krótki kod formularza napisanego OPP. Form jest samo przetwarzający się, posiada też krótką walidację, odnośnie tego, czy wartości podane przez użytkownika są liczbami. Ten formularz ma tylko jeden cel: chcę się od Was dowiedzieć czy w ogóle zrozumiałem ideę OPP? Chciałbym wiedzieć, czy rozumiem sens tworzenia nowych obiektów i przeprowadzania na nich operacji. Bo nigdy nie wiem, czy operacje mam opisac poza class'a czy w jakies funkcji class'y?

  1. <?php
  2. class Form extends Walidate{
  3.  
  4.    public $arrInputs = array();
  5.  
  6.    public function __construct(){
  7.        if($this->checkPost()){
  8.            $this->walidatePosts();
  9.        }
  10.    }
  11.  
  12.    public function addInput($inputType, $name, $value, $inputText){
  13.        $input = ''.$inputText.'
  14. ';
  15.        array_push($this->arrInputs, $input);
  16.    }
  17.  
  18.    public function setForm($method = 'post', $action = ''){
  19.        $s = '';
  20.        $s .= '';
  21.        foreach($this->arrInputs as $value ){
  22.            $s .= &#092;"$value\n\";
  23.        }
  24.        $s .= '';
  25.        return $s;
  26.    }
  27. }
  28.  
  29. class Walidate{
  30.    public function checkPost(){
  31.        foreach($_POST as $value){
  32.            if(!$value)
  33.                return FALSE;
  34.        }
  35.        return TRUE;
  36.    }
  37.  
  38.    public function walidatePosts(){
  39.        foreach($_POST as $value){
  40.            if(!ereg('^[0-9] , $value))
  41.                die('Podane wartości nie są liczbami!');
  42.        }
  43.        $numbers = implode(', ', $_POST);
  44.        echo \"Podane wartośc: $numbers są liczbami.\";
  45.    }
  46. }
  47.  
  48. echo 'Proszę podać dwie wartości, które są liczbami.
  49. ';
  50. $showForm = new Form();
  51. $showForm->addInput('text', 'Tpierwszy', '', 'Pierwsza wartość');
  52. $showForm->addInput('text', 'Tdrugi', '', 'Druga wartość);
  53. echo $showForm->setForm();
  54. ?>


Ten post edytował ed3k 23.09.2008, 11:52:40
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Cytat
class Form extends Walidate{

To nie ma żadnego sensu. Czy uważasz, że w prawdziwym świecie formularz podatkowy rozszerza panią Krysię z Urzędu Skarbowego, która go sprawdza?

Cytat
die('Podane wartości nie są liczbami!');
//i za chwilę
echo "Podane wartośc: $numbers są liczbami.";

Po co mi metoda w(v)alidate(), która nie pozwala mi zareagować na błąd tak, jak chcę?

Czy to jest zgodne z duchem OOP? Nie, OOP to sposób myślenia o obiektach i ich relacjach. Tego u Ciebie nie widać, masz kod stukturalny zamknięty w klasy. Sugestia - zainwestuj w literaturę papierową smile.gif

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
ed3k
post
Post #3





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 30.03.2008

Ostrzeżenie: (0%)
-----


Mam książkę "Biblia PHP5 i MySQL", czytam na bieżąco przykłady na forum. Czego mi tu brakuje aby się uwolnić o kodu strukturalnego?

Napisałem inny przykład, galerię. Pobiera ona informacje o zdjęciach z bazy danych i je przetwarza wyświetlając miniaturki zdjęć. Jest to początek przyszłej galerii. Może tu lepiej uchwyciłem tego ducha?

  1. <?php
  2. class GaleryIcons{
  3.    public $q; // MySQL query;
  4.    public $r; // result from MySQL query;
  5.    public $arrPhotos = array();
  6.  
  7.    public function __construct($host, $user, $pass, $db){
  8.        mysql_connect($host, $user, $pass) or die('Błąd przy połączeniu z bazą danych.');
  9.        mysql_select_db($db) or die('Błąd przy wyborze bazy danych.');
  10.    }
  11.  
  12.    public function addPhoto($photo){
  13.        array_push($this->arrPhotos, $photo);
  14.    }
  15.  
  16.    public function MySQLQuery($query){
  17.        $this->r = mysql_query($query) or die('Błąd przy zapytaniu MySQ: '.mysql_error());
  18.    }
  19.  
  20.    public function showIcons($arrPhotos){
  21.        $s = '';
  22.        foreach($arrPhotos as $value){
  23.            $s .= <<<kodHTML
  24.                     <div>
  25.                         <img src="obrazy/$value" width="120px" />
  26.                     </div>
  27. kodHTML;
  28.        }
  29.        return $s;
  30.    }
  31. }
  32.  
  33. $galeria = new GaleryIcons('localhost', 'root', 'zaq12wsx', 'galeria');
  34. $galeria->q = "SELECT zdjecie FROM oth_galeria ORDER BY zdjecie";
  35. $galeria->MySQLQuery($galeria->q);
  36. while($row = mysql_fetch_row($galeria->r)){
  37.    $galeria->addPhoto($row[0]);
  38. }
  39. echo $galeria->showIcons($galeria->arrPhotos);
  40. ?>
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #4





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@ed3k
Zrób jedną rzecz, narysuj tego diagram w UML, a potem pomyśl czy tak powinien wyglądać.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
LBO
post
Post #5





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Cysiaczek @ 23.09.2008, 02:59:50 ) *
formularz podatkowy rozszerza panią Krysię z Urzędu Skarbowego, która go sprawdza?

Telefonistka dziedziczy po telefonie biggrin.gif:D:D:D:D

Ten post edytował LBO 23.09.2008, 13:53:33
Go to the top of the page
+Quote Post
mecenas
post
Post #6





Grupa: Zarejestrowani
Postów: 80
Pomógł: 5
Dołączył: 23.09.2008
Skąd: Chełmno/Toruń

Ostrzeżenie: (0%)
-----


partykularnie - OBIEKTOWO oznacza podejście do każdego elementu jak do OBIEKTU. Każdy OBIEKT ma swoje metody (funkcje).

Stworzenie nowego obiektu ma na celu wykreowanie pewnej określonej funkcjonalności jakiegoś abstrakcyjnego tworu programistycznego, czyli - przykładowo - zgrupowania pewnych wielkości w logiczną całość. Z grubsza można by uznać, że wiersz z tabeli w bazie danych jest obiektem (no i na upartego ma jakieś swoje metody w postaci zapytań winksmiley.jpg.

Co to daje w praktyce? Dzięki odpowiedniemu podejściu po stworzeniu klasy możemy swobodnie operować nowym, stworzonym przez nas typem, co pozwala na duże uproszczenie kodu, zwiększenie jego przejrzystości, jest także wygodne, bo w przypadku chęci wprowadzenia zmian w jakiejś funkcji dla danego typu (tudzież zmian w dociążonym/przeciążonym operatorze) sprawa sprowadza się do eleganckiej modyfikacji w ciele klasy smile.gif

wybaczcie bełkot smile.gif


--------------------
-- http://rafaljakubowski.net76.net --
google's my life ;)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 07:37