Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][PHP]Programowanie obiektowe, jak nie mieszać logiki z HTMLem
gargamel
post
Post #1





Grupa: Zarejestrowani
Postów: 278
Pomógł: 35
Dołączył: 25.06.2010

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


Przyszedł czas przestawić się na programowanie obiektowe, ale żeby od razu źle nie zacząć, mam pytanko.

Napisałem prostą klasę (do generowania formularzy), aby od czegoś zacząć:
  1. class formClass
  2. {
  3. public $output;
  4. public $startedGroup;
  5.  
  6. public function formGroup(){
  7. if($startedGroup){
  8. $this -> output .= "</div>\n";
  9. }
  10. $this -> output .= "<div>\n";
  11. $this -> startedGroup = true;
  12. }
  13.  
  14. public function formElement($name){
  15. $this -> output .= "<div>".$name.": <input type='text' name='".$name."' /></div>\n";
  16. }
  17.  
  18. public function printForm(){
  19. $this -> output .= "</div>\n";
  20. echo $this -> output;
  21. }
  22. }
  23.  
  24. $form = new formClass;
  25.  
  26. $form -> formGroup();
  27. $form -> formElement('imie');
  28. $form -> formElement('nazwisko');
  29. $form -> formElement('wiek');
  30.  
  31. $form -> formGroup();
  32. $form -> formElement('adres_email');
  33. $form -> formElement('telefon');
  34.  
  35. $form -> printForm();


I teraz problem... wszędzie pisze się aby nie mieszać logiki z HTMLem, a ja tu nie widzę żadnej możliwości, aby wywoływane metody nie zwracały HTMLa...
W jaki sposób powinno się prawidłowo coś takiego robić?

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





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

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


Zacznij może od tego, że ten kod to do kosza się jedynie nadaje.

1. Można dodawać jedynie elementy INPUT z typem TEXT? A co z ~20 pozostałymi standardowymi kontrolkami udostępnianymi przez HTML?
2. Nie ma możliwość żadnej ingerencji w "szablony". Myślisz, że zawsze konstrukcja <div>{{ LABEL }} {{ INPUT }}</div> się sprawdzi? Każdy szablon (formularza, grupy elementów, samego elementu, etykiety i w końcu kontrolki HTML) powinien być modyfikowalny.

No i jeszcze kilka rzeczy co do podstaw OOP i dobrych praktyk:
1. Nazwy klas powinny być rzeczownikami i rozpoczynamy je wielką literą, np.: FormDecorator.
2. Nazwy metod to czasowniki określające co ma zrobić obiekt, np.: addElement (Dekoratorze formularza dodaj element).
3. Z punktu #2 można łatwo wywnioskować, że metoda [i]formGroup
jest kompletnie bezsensu. Powinno być addGroup gdzie jako pierwszy argument przekazuje się grupę (obiekt, który zawiera elementy)

Cytat
I teraz problem... wszędzie pisze się aby nie mieszać logiki z HTMLem, a ja tu nie widzę żadnej możliwości, aby wywoływane metody nie zwracały HTMLa...
W jaki sposób powinno się prawidłowo coś takiego robić?
Skoro zadaniem tej "logiki" jest generowanie HTML-a to chyba oczywiste jest, że musi ona zwrócić ten HTML, co nie?

Swoją drogą, takie coś powinno być bezpośrednio powiązane z frameworkiem obsługi formularzy inaczej naprawdę niewiele zyskujesz tworząc coś takiego.

Ten post edytował Crozin 18.03.2011, 19:26:28
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 8.10.2025 - 15:57