Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]programowanie obiektowe (czy jest dobrze), na początek system formularzy
Lejto
post 27.04.2008, 16:11:34
Post #1





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


Postanowiłem się w końcu zacząć uczyć programowania obiektowego. guitar.gif Na początek napisałem skrypt który graweruje formularze. Czy kod jest optymalny? Co w nim jest niepotrzebne a co zmienić?
  1. <?
  2. class mech_form
  3. {
  4.  
  5. function utworz($action, $nazwa, $metoda)
  6. {
  7. echo '<form action="'.$action.'" name="'.$nazwa.'" method="'.$metoda.'">';
  8. }
  9.  
  10. function utworzPoleInput($type, $size, $value)
  11. {
  12. $a = new tworzHTML();
  13. $a->PoleInput($type, $size, $value);
  14.  }
  15.  
  16. }
  17.  
  18. class tworzHTML extends mech_form 
  19. {
  20.  
  21. function PoleInput($type, $size, $value)
  22. {
  23. echo $nazwa.'<input type="'.$type.'" size="'.$size.'" value="'.$value.'">'; 
  24. }
  25.  
  26. }
  27.  
  28. $mech_form = new mech_form();
  29.  
  30.  
  31. ?><br />
  32. <?
  33. $formularz = $mech_form->utworz('formularz', 'Nazwa', 'post');
  34. ?>
  35. <table>
  36. <tr>
  37. <td>Nick: </td>
  38. <td><? $mech_form->utworzPoleInput('text', '3', 'ELO'); ?>
  39. </td>
  40. </tr>
  41. </table>
  42. </form>


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
dr_bonzo
post 27.04.2008, 16:57:07
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


W jakim celu
1. klasa tworzHTML rozszerza mech_form
2. istnieje klasa tworzHTML

pozatym: dla tak prostej funkcjonalnosci wystarcza funkcje, krocej sie pisze.

Ten post edytował dr_bonzo 27.04.2008, 16:57:51


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
marcio
post 27.04.2008, 16:58:03
Post #3





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Kiedys jak tez sie chcialem uczyc OOP to tez napisalem cos takiego
  1. <?php
  2. class Html_code {
  3.  
  4. protected $action, $method, $name, $type, $value, $rows, $cols, $style, $html;
  5.  
  6. public function new_form($action, $method) {
  7.  
  8. return '<form method="'.$method.'" action="'.$action.'">';
  9. }
  10.  
  11. public function text_input($name, $type, $value = '', $style) {
  12.  
  13. return '<input type="'.$type.'" name="'.$name.'" value="'.$value.'" style="'.$style.'">';
  14. }
  15.  
  16. public function textarea($name, $value, $rows, $cols, $style) {
  17.  
  18. return '<textarea name="'.$name.'" cols="'.$cols.'" rows="'.$rows.'" style="'.$style.'">'.$value.'</textarea>';
  19. }
  20.  
  21. public function button($name, $type, $value, $style) {
  22.  
  23. return '<input type="'.$type.'" name="'.$name.'" value="'.$value.'" style="'.$style.'">';
  24. }
  25.  
  26. public function html($html) {
  27.  
  28. return $html;
  29. }
  30. };
  31. ?>

Moze ci sie przyda


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
phpion
post 27.04.2008, 17:07:13
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Moim zdaniem tego typu metody lepiej deklarować jako statyczne. Jeśli chciałbyś sobie podejrzeć inne rozwiązania to możesz zobaczyć te, które są wbudowane we framework Kohana:
HTML
Form
Proste, a przy tym cholernie użyteczne i przydatne smile.gif
Go to the top of the page
+Quote Post
marcio
post 27.04.2008, 17:44:15
Post #5





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


HEh @phpion te klasy sa o duzo wiecej rozbudowane i bardziej skomplikowane jak dla mnie ja wole cos mojego i latwego za pomoca tamtej klasy napisalem nawet ksiege gosci i dziala tongue.gif ogolnie OOP sie nie zajmuje ale dobrze wiedziec ze takie cos instnieje


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Sedziwoj
post 27.04.2008, 22:46:56
Post #6





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

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


Cytat(phpion @ 27.04.2008, 18:07:13 ) *
Moim zdaniem tego typu metody lepiej deklarować jako statyczne. Jeśli chciałbyś sobie podejrzeć inne rozwiązania to możesz zobaczyć te, które są wbudowane we framework Kohana:
HTML
Form
Proste, a przy tym cholernie użyteczne i przydatne smile.gif


Może i proste, ale nie przydatne, nawet warstwa widoku nie jest wydzielona. Do tego to kod proceduralny zamknięty w obiekcie.
Tak aby nie być gołosłownym, to mamy obiekt formularza, który ma pola, każde pole ma swój typ, nazwę, walidację...
To było by obiektowe, a nie takie coś.

EDIT literówka

Ten post edytował Sedziwoj 27.04.2008, 22:47:40


--------------------
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
Cysiaczek
post 28.04.2008, 00:54:55
Post #7





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




Obiektowo chcecie? Proszę: http://www.plentyofcode.com/2008/04/7-days...symfony-11.html

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
phpion
post 28.04.2008, 06:00:15
Post #8





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@Sedziwoj masz rację ale:
- kolega zaczyna zgłębiać OOP,
- średnio wyobrażam sobie wydzielenie warstwy widoku dla jednego inpucika winksmiley.jpg moim zdaniem przerost formy nad treścią.
Go to the top of the page
+Quote Post
Sedziwoj
post 28.04.2008, 06:24:42
Post #9





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

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


Cytat(Cysiaczek @ 28.04.2008, 01:54:55 ) *

Na pewno przeczytam, ale nie teraz...

Cytat(phpion @ 28.04.2008, 07:00:15 ) *
@Sedziwoj masz rację ale:
- kolega zaczyna zgłębiać OOP,

Powiedz szczerze, czy brałeś to w ogóle pod uwagę, bo mi się wydaje że nie, więc nie pisz o tym innym, do tego to nie jest meritum sprawy.
Do tego piszesz o OOP, a nie o klasach, więc OOP to nie jedna klasa, ale to chyba wiesz.
Cytat
- średnio wyobrażam sobie wydzielenie warstwy widoku dla jednego inpucika winksmiley.jpg moim zdaniem przerost formy nad treścią.

Ech, no i właśnie tak powstaje syf w aplikacjach, "po co widok, przecież to tylko jedno echo". Nie chce mi się tłumaczyć dlaczego to jest dobre rozwiązanie, bo to jakby tłumaczyć dlaczego używać wzorca MVC (tudzież MVP).


--------------------
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
Lejto
post 4.05.2008, 19:34:28
Post #10





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


napisałem takie coś:
  1. <?php
  2. class mech_tabele
  3. {
  4.  
  5. function utworz_tabele($class, $align, $bordercolor, $border, $cellpadding, $cellspacing, $id)
  6. {
  7. echo '<table class="'.$class.'" align="'.$align.'" bordercolor="'.$bordercolor.'" border="'.$border.'"
  8.  cellpadding="'.$cellpadding.'" cellspacing="'.$cellspacing.'" id="'.$id.'">';
  9. }
  10. function utworz_wierssz()
  11. {
  12. echo '<tr>';
  13. }
  14. function utworz_kolumne($bgcolor,$tekst)
  15. {
  16. echo '<td bgcolor="'.$bgcolor.'"><b>'.$tekst.'</b>';
  17. }
  18. function zamknij_wiersz()
  19. {
  20. echo '</tr>';
  21. }
  22. function zamknij_kolumne()
  23. {
  24. echo '</td>';
  25. }
  26. function zamknij_wszytko()
  27. {
  28. echo '</td></tr></table>';
  29. }
  30. }
  31.  
  32.  
  33.  
  34.  
  35. $mech_tabele = new mech_tabele();
  36.  
  37. $mech_tabele->utworz_tabele('ucz', 'center', '#000000', '1', '1', '0', 'problem');
  38.  $mech_tabele->utworz_wierssz();
  39. $mech_tabele->utworz_kolumne('#FF3030', 'Problem:');
  40. $mech_tabele->zamknij_kolumne();
  41. $mech_tabele->zamknij_wiersz();
  42. $mech_tabele->utworz_wierssz();
  43. $mech_tabele->utworz_kolumne('#FF3030', '');
  44.  throw new Exception('Formularz wypełniony nieprawidłowo<br><br>');
  45. $mech_tabele->zamknij_wszytko();
  46. ?>

opłacalne? czy oprzeć na tablicy czy może jakoś inaczej?


--------------------
Go to the top of the page
+Quote Post
bim2
post 4.05.2008, 19:40:08
Post #11





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Ja tu z obiektowości nie widze nic poza słowem class ohmy.gif

Klasa ma ułatwić programowanie, przyszybszyć je, a w twoim wypadku tylko spowalnia. Licz ile literek to zamknij_kolumne() a ile to </td> ?

Wywal wszystko co masz, co wiesz. Poczytaj jeszcze raz, pooglądaj przykłady w "Algorytmy, klasy funkcję" i napisz coś co się przyda, nic na siłę.


--------------------
Go to the top of the page
+Quote Post
Crozin
post 4.05.2008, 19:45:18
Post #12





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Kod HTML generowany przez to nadaje się tylko do kosza - od formatowania jest CSS winksmiley.jpg
W dodatku trzeba wywoływać masę niepotrzebnych metod - wcale nie jest to wygodniejsze od ręcznego wklepania.

Generalnie nie ma chyba jakiegoś sztywnego wzorca - wszystko powinno być stworzone tak, aby działało jak najlepiej pod konkretny projekt.

Może to być coś takiego:
  1. <?php
  2. $table = new table(4); //ilość kolumn
  3. $table->addCell('trescKolumny1')->addCell('kolumny2');
  4. //....
  5. $table->addCell('kolumny3')->addCell('czwartej');
  6. //...
  7. $table->addCell('kolumny1 - wiersza 2 (samo przerzuci)');
  8. ?>
Ale jak napisałem - powinno to być zrobione pod konkretne zadanie.
Go to the top of the page
+Quote Post
Strzałek
post 4.05.2008, 20:59:53
Post #13





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


Przede wszystkim - generowanie HTML za pomocą różnorodnych klas to jakaś pomyłka jest (przynajmniej dla mnie). Html się klepie ręcznie i tyle. Dla mnie to przerost formy nad treścią.

A kolega chce się nauczyć programowania obiektowego? Najlepiej uczyć się na jakiś przykładach. Poczytaj sobie kod frameworków - Symfony, Agavi, czy nawet ZF to powinno w pewnym momencie zaskoczyć własciwe rozumowanie winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
Sedziwoj
post 4.05.2008, 23:43:48
Post #14





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

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


Cytat(Strzałek @ 4.05.2008, 21:59:53 ) *
Przede wszystkim - generowanie HTML za pomocą różnorodnych klas to jakaś pomyłka jest (przynajmniej dla mnie). Html się klepie ręcznie i tyle. Dla mnie to przerost formy nad treścią.


W tych rzeczach co właściwie wyłącznie pojawiają się na forum, to tak, takie html w php...
Ale jak zamyka się większe logiczne komponenty i mają one swój sposób wyświetlania to inna sprawa.
Chociażby stronicowania, coś co generuje odpowiednie rzeczy, ładny obiektów kod, tylko co ma zrobić, nie jak, a potem jest szablon to prezentujący, wtedy grafik ma dostęp do niego może zmieniać, a obiektowość (czy w tym przypadku może jedna klasa) jest niewidzialna dla niego, a dla programisty nie ma html.
Może to proste napisanie tego, ale po co się bawić w stronicowanie za każdym razem, gdy parametrów jest niewiele ile stron, która obecnie, ile ma wyświetlić numerków w przód i tył itp., najczęściej będą tylko dwa używane, więc mając taki komponent to chwila i ma się stronicowanie.

To samo można osiągnąć w formularzach, ale to większa zabawa...
(hm, jeszcze nie miałem czasu przeczytać tego co Cysiaczek dał linka :| )


--------------------
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
bziur
post 5.05.2008, 08:32:52
Post #15





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 4.05.2008

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


Powiem tak - dla mnie programowanie obiektowe przejawia sie nie tylko w kawalku kodu, ktory nazywa się klasa - jest to makro na makro, a wiec jedna wielka klasa generuje jeden wielki obiekt, a w kodzie nam to zajmuje kilka linijek. Uzywanie klas do generowania pojedynczych znacznikow HTML jest przelozeniem macro na micro, czyli wielka klasa generuje maly kod, a to juz niedobrze, bo marnuja sie bajciki  winksmiley.jpg

Bardzo dobrym przykladem dobrze napisanego obiektu-klasy jest klasa FCKeditora, ktorego kod tego typu:

  1. <?php
  2. $FCKeditor['articleText'] = new FCKeditor('text') ;
  3. $FCKeditor['articleText']->BasePath = 'FCKeditor/';
  4. $FCKeditor['articleText']->ToolbarSet = 'Default';
  5. $FCKeditor['articleText']->Value = 'testowy text';
  6. $FCKeditor['articleText']->Height = 400;
  7. $FCKeditor['articleText']->Width = '100%';
  8. ?>




generuje nam taki ladny edytor jak przedstawiony w odsylaczu: http://www.fckeditor.net/demo/language
Go to the top of the page
+Quote Post
Athlan
post 5.05.2008, 10:18:03
Post #16





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Po 1.
http://forum.php.pl/index.php?s=&showt...st&p=466253
Kolejne nie-OOP, kopiujesz metody jak popadnie. Nie lepiej miec metody, które wyzwalają inną metodę (wpisują typ i zakres danych) np protected $this->_pole_input( paramy ) i zastępują tylko type.

Po 2. Po grzyb pisać generator formularzy tongue.gif ? zawsze znajdzie się jakiś parametr, który odrzuci klasę, np dodatkowe atrybuty. Warto o tym pomyśleć i oprócz name itd dorobić metody addAttribute($sName, $sValue).

Po 3. Fajnie by było rozszerzyć takie klasę o validację, pobieranie wartości z POST'u jeżeli są przesłane, a jeżeli nie to z bazy danych (jeżeli to edycja czegoś, po postowaniu dane z bazy zamieniają się na dane z POST'u chwilowo w wyświetleniu formularza).

Ogólnie to nie OOP tongue.gif


--------------------
Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem.
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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 15:16