Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Poprawne pisanie
Forum PHP.pl > Forum > PHP > Object-oriented programming
emil_seba
Witam, mam taki problem. Chce napisać stronę www obiektowo i tak:
+ Mam klasę A w pliku class.A.php:
  1. class A
  2. {
  3. protected $imie;
  4. protected $nazwisko;
  5. protected $znajomi;
  6. public function showDaneUzyt()
  7. {
  8. echo 'imie: '.$this->Imie.' nazwisko: '.$this->nazwisko.'<br />';
  9. }
  10. public function showZnajomych()
  11. {
  12. foreach($this->znajomi as $ob)
  13. {
  14. echo $ob;
  15. }
  16. }
  17.  
  18. }


plik index.html:
  1. // jakies bajery oraz
  2. echo '<a href = "Widok.php?showDane=1">Pokaz Dane Uzytkownika</a><br />';
  3. echo '<a href = "Widok.php?showZnj=1">Pokaz Znajomych Uzytkownika</a><br />';


oraz plik Widok.php
  1. require_once('class.A.php');
  2.  
  3. $obiekt = new A;
  4.  
  5. if(isset($_GET['showDane']))
  6. $obiekt->showDaneUzyt()
  7. if(isset($_GET['showZnj']))
  8. $obiekt->showZnajomych()
  9.  


Moje pytanie brzmi: jak poprawnie powinno się pisać strony obiektowo, czy tak jak wyżej (lecz jeżeli klasa A miała by np 100 funkcji i chcial bym je wywoływać
po kliknięciu gdzieś na stronie i sprawdzać która mam wykonać za pomocą tablicy GET a która nie, to ? No właśnie, bym musiał sprawdzać ciągle co jest w adresie) Idzie jakoś inaczej to zrobić? Lepszym rozwiązaniem było by skorzystanie ze zmiennych sesyjnych ? A może lepiej by bylo podzielic plik Widok na kilka mniejszych np WidokZnajomych.html, WidokX.html, WidokY.html ? I ostatnie pytanie, jeżeli wchodzę na strone Widok.php to jest tworzony obiekt, po odswiezeniu strony ten obiekt jest tworzony od nowa (o ile dobrze rozumiem ), wiec jezeli podzielił bym strone Widok.php na kilka mniejszych i w pierwszej zapisal
pierwsza.html
  1. $obiekt = new A;
  2. $obiekt->podaj();//przykladowa funkcja
  3. $obiekt->dodaj();//przyk..
  4. echo '<a href = "droga.html">Zobacz swojego kumpla</a><br />';


droga.html
  1. $obiekt = new A;
  2. $obiekt ->zobaczKumpla();


to moja strona zlozona z kilku podstron dzialala by z takim samym narzutem pamieciowym co wszystko razem np :
strona.html
  1. $obiekt = new A;
  2. $obiekt->podaj();//przykladowa funkcja
  3. $obiekt->dodaj();//przyk..
  4. echo '<a href = "strona.html?zobaczKumpla=1">Zobacz swojego kumpla</a><br />';
  5. if(isset($_GET['zobaczKumpla']))
  6. $obiekt ->zobaczKumpla();

Który sposób jest lepszy? Ten kod jest oczywiście przykładowy.
Grand93
Sorki ze nie będę odpowiadał po kolei - i nie do końca na temat winksmiley.jpg
Ja bym to zrobił w ten sposób ( i chyba każdy inny programista php szanujacy swój czas i prędkość wykonywania skryptow tez winksmiley.jpg ), ze :
  1. $objA = new A;
  2. /*
  3. tutaj metody do łączenia z baza etc.
  4. */
  5. $objA -> $_GET['akcja'] . 'Action'();

w klasie A dodaj funkcje __call która będzie wyrzucać błąd 404 ( brak danej akcji )

tak w nawiasie - jest taka zasada która mówi ze ma istnieć tylko jeden powód aby edytowac / pisać od nowa klasę - takim podejściem mijasz się z celem OOP.
Twój kod będzie nieskalowny i praktycznie niemodyfikowalny / nierozszerzalny.

Co do ilości plików - nie ma to aż takiego znaczenia gdy chodzi o jakość i przejrzystosc kodu - 10 plików, z których każdy służy do czegoś innego łatwiej jest edytowac niż jeden pogmatwany winksmiley.jpg

pozdrawiam Mateusz

ps - jeżeli się mylę przepraszam i poprawcie mnie winksmiley.jpg
ps2 - @Emil_seba mam nadzieje ze zrozumiales. Jeżeli nie to pytaj.

Btw - dziwilo mnie ze ten post jest tyle bez odpowiedzi - bynajmniej podziwiam większa cześć forumowiczów winksmiley.jpg
emil_seba
a mógł bym prosić o jakiś przykład z wywołaniem funkcji typu $obj->$_GET['cosTam'].'Action'(); ?
Crozin
Zamiast korzystać z porąbanych elementów języka (notabede podany przykład jest niepoprawnym składniowo kodem) skorzystaj z normalnych narzędzi: reflection
emil_seba
Dzięki za odpowiedź, Crozin mógł byś napisać mi jakie błędy składniowe popełniłem, nie chce ich popełniać w przyszłości.
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.