Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obiektowość w php
Forum PHP.pl > Forum > PHP
Jarod
Na jednej ze stron przecztałem coś takiego:

"Jak powszechnie wiadomo, programowanie obiektowe w php mocno kuleje. Kod pisany obiektowo jest mocno spowoniony. php ma także niewiele z mechanizmów obiektowych, znanych z innych języków programowania. Dlatego też nie ma jeszcze wielu przesłanek żeby pisać obiektowo w php."

Coraz częściej widzę kod pisany obiektowo. Czy warto pisać w ten sposób czy odpuścić sobie to pseudo obiekotwe pisanie?
Kuziu
No niby warto ale na moje to to nie jest pełna obiektowość tylko jakieś pseudo coś co daje troche bardziej przejrzysty kod.

W sumie założenia php czyli każdorazowe odpalanie skryptu na zapytanie nie pozwala na pełną obiektowość php.

Co innego gdyby dla każdej konta na serverze tworzył się wątek i on wszysto obsługiwał. A tak często nie ma sensu robić czegoś obiektowo bo zajmie zbyt wiele czasu.

Mimo to robię "Obiektowo" w php by jak wspomnialem mieć troche porządku w kodzie.
NuLL
Gdzie zes to przeczytal questionmark.gif Jakies starocie dot PHP3 pisane pewnie przez jakiegos pseudoguru.
Jarod
Cytat(NuLL @ 2006-04-10 23:08:30)
Gdzie zes to przeczytal questionmark.gif Jakies starocie dot PHP3 pisane pewnie przez jakiegos pseudoguru.

Tu http://www.strefaphp.net/artykul46.html

Wiem że od czasu kiedy to zostało napisane dużo się zmieniło ale to co jest w php to nie jest obiektowość.
Zastanawiam się co daje tak naprawdę (oprócz przejrzystości i myśli że piszemy obiektowo) pisanie skryptów z wykorzystaniem klas? Bo moim zdaniem nic pożytecznego.

Jestem ciekaw Waszych opini.

pozdrawiam
hwao
Artykul stary, i troche glupio mi mowic ale autor niezbyt sie zna na php.

Cytat
  1. <?php
  2.  $arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
  3.  for ($i = 0; $i < count($arr); $i++) {
  4.  echo $arr[$i];
  5.  }
  6. ?>


Funkcja count() wykonywana jest przy każdym przebiegu pętli. Zamiast tego wynik działania tej funkcji można zapisać do zmiennej w sekcji inicjalizującej pętlę i skorzystać z niej w warunku.

Kod:

  1. <?php
  2.  (...)
  3.  for ($i = 0, $count = count($arr); $i < $count; $i++) {
  4.  (...)
  5. ?>


Widac odrazu ze autor srednio sie zna, przeciesz duzo lepiej bylo uzyc foreach" title="Zobacz w manualu php" target="_manual, takich kwiatków jest pare.

Pozatym wyglada mi to jak opis do PHP4, w PHP5 znacznie to ruszylo, cos mi sie wydaje ze jednak musze napisac tego arta na mojego bloga odnosnie oop.. smile.gif
Jarod
Cytat(hwao @ 2006-04-11 06:19:24)
Artykul stary, i troche glupio mi mowic ale autor niezbyt sie zna na php.

Cytat
  1. <?php
  2.  $arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
  3.  for ($i = 0; $i < count($arr); $i++) {
  4.  echo $arr[$i];
  5.  }
  6. ?>


Funkcja count() wykonywana jest przy każdym przebiegu pętli. Zamiast tego wynik działania tej funkcji można zapisać do zmiennej w sekcji inicjalizującej pętlę i skorzystać z niej w warunku.

Kod:

  1. <?php
  2.  (...)
  3.  for ($i = 0, $count = count($arr); $i < $count; $i++) {
  4.  (...)
  5. ?>


Widac odrazu ze autor srednio sie zna, przeciesz duzo lepiej bylo uzyc foreach" title="Zobacz w manualu php" target="_manual, takich kwiatków jest pare.

Pozatym wyglada mi to jak opis do PHP4, w PHP5 znacznie to ruszylo, cos mi sie wydaje ze jednak musze napisac tego arta na mojego bloga odnosnie oop.. smile.gif

Napisz napisz - szybko bo z chęcia poczytam.


Co do foreach to autor tego artykułu napisał, że foreach jest wolny i lepiej stosować pętle for.. To prawda?

hwao czy znasz gdzieś jakieś dobrze napisane arty o oop po polsku - z chęcią się zapoznam bo w mojej książce do php4 jest mało napisane na ten teamt.

Gdzie znajdę opisane wszystkie różnice między php4 a php5?
060156
Oj, to jakie przestarzale artykuly czytale o objektowosci ...
Php5 w pelni posiada mechanizmy do opiektowego pisania
programow, porownywalen sa one z Java a bardziej moze
z Pythonem ...
Inna sprawa jest jak pisac pogramy obiektowo..
Polecam ogolne OO Design Pattern i AntiPattern (jakie czesto
sie popelnia bedy przy pisaniu obiektowym) i rowniez ich implementacje
w Php5 ..
Jarod
Cytat(060156 @ 2006-04-11 08:06:11)
Oj, to jakie przestarzale artykuly czytale o objektowosci ...
Php5 w pelni posiada mechanizmy do opiektowego pisania
programow, porownywalen sa one z Java a bardziej moze
z Pythonem ...
Inna sprawa jest jak pisac pogramy obiektowo..
Polecam ogolne OO Design Pattern i AntiPattern (jakie czesto
sie popelnia bedy przy pisaniu obiektowym) i rowniez ich implementacje
w Php5 ..

Podać linki do jakiś stron?
.rh-
Autorem powyzszych zdan moglby byc rowniez jakis profesor z wyzszej uczelni:). Wpiekszosc z nich nie uznaje tego jezyka, niewspomne juz o Mysql' ktory podobno ma zle zaimplementowanego SQL'a...
dr_bonzo
Cytat
W sumie założenia php czyli każdorazowe odpalanie skryptu na zapytanie nie pozwala na pełną obiektowość php.

Kazdorazowe uruchamianie nie ma zadnego wplywu na mozliwosci obiektowe php -- gdyby php bylo kompilowane to chodzilo by po prostu szybciej (tylko bez ale o zendcompiler i mmturkcache -- wiem ze istnieja).

Cytat
OO Design Pattern i AntiPattern
sa w ksiegarniach/bibliotekach.

Cytat
Gdzie znajdę opisane wszystkie różnice między php4 a php5?
W naszym kochanym [RTF]Manualu: http://pl.php.net/manual/en/migration5.php...ration5.changes
Jarod
Jeszcze Was pomęcze. Wiadomo, że jeśli chcemy mieć dostęp do jakiejś zmiennej w funkcji należy w danej funkcji zadeklarować global:

  1. <?php
  2.  $myNumber = 2;
  3.  $zmienna = 10;
  4.  $mySquaredNumber = square($myNumber);
  5.  
  6. function suqare($number)
  7. {
  8.  
  9. gobal $zmienna;
  10.  
  11. echo $zmienna;
  12. return $number * $number;
  13. }
  14. ?>


Jednak w artykule na stronie http://php.pl (artykuł projektowanie aplikacji php - częśc pierwsza) można przeczytać:

Cytat
Ponadto, unikaj użycia instrukcji global - prowadzi ona do powstania nieelastycznego kodu, często prowadzącego projektanta do ogromnych strat czasu, w poszukiwaniu pierwotnego znaczenia zmiennych zadeklarowanych jako globalne. Jeśli masz dane obiekty, które muszą być dostępne globalnie, po prostu twórz do nich referencje, a intencja stanie się jasna i nikt nie będzie musiał się zastanawiać, skąd pochodzą informacje.


Czyli nie używać wogóle global? To jak w takim razie zmienić przykład funkcji, który podałem na bardziej wydajny - bez global?
nospor
a moze by tak przekazac jako parametr?
  1. <?php
  2. function suqare($number, $zmienna)
  3. {
  4.  
  5. return $number * $number;
  6.  echo $zmienna;//pozatym to ci sie nigdy nie wykona :)
  7. }
  8. ?>
Jarod
Cytat(nospor @ 2006-04-11 08:54:24)
a moze by tak przekazac jako parametr?
  1. <?php
  2. function suqare($number, $zmienna)
  3. {
  4.  
  5. return $number * $number;
  6.  echo $zmienna;//pozatym to ci sie nigdy nie wykona :)
  7. }
  8. ?>

Mój błąd - już poprawiłem.

Czyli potwierdzasz, żeby nie używać global? Czy to rzeczywiście ma takie znaczenie? To po co jest utworzone global i po co się pisze o tym w podręcznikach?
nospor
Cytat
po co się pisze o tym w podręcznikach?

W podręcznikach również jak podają kod, to przyjmują ze register_globals jest on i do danych z forma dobierają się tak: $zmienna
zamiast: $_POST['zmienna']
krótko mówiąc, nie bierz se zawsze do serca co mówią ksiązki smile.gif życie samo skoryguje

a z globali sam czasem korzystam, nawet często smile.gif mamy taką architekurę aplikacji, ze globale to w miarę dobre wyjscie. za duzo by tu pisac

Ale w tym przypadku jest to zbędne.
060156
Oczywiscie uzycie global jest zaprzeczeniem
OO aczkolwiek czasami jest wygodne ale w zupelnosci mozna
unikac zmiennych globalnych jak sie wlasciwie zaprojektuje
klasy ...
OO polega na tym ze projektuje sie obietky,
ktore posiadaja atrybuty i metody a nastepnie sluza
one jako cegielki do budowania aplikacji..

Z reguly mamy nastepujace typy obiektow:

- entity objekty ktore reprezentuja jakas realna wartosc
(faktura, klijent, etc.) i sa zapamietywane z reguly
w database (moze byc Mysql)
- control obiekty, ktore zarzadzaja logika aplikacji
i processuja entity obiekty i posiadaja swoj stan
- interface obiekty, ktore sluza do komunikowania
z innymi systemami ...

Mam nadzieje, ze ten krotki opis choc troce Ci przyblizy OO.

Ja uzywam od wielu lat OO projektowanie i programowanie
i rezultaty sa naprawde ciekawe, ale zajelo to torche czasu
zanim poznalem zasady OO to wtedy zrozumialem
ich duza zalete. Bez tego raczej jest trudno to od razu
zrozumiec ..
Jarod
Cytat(060156 @ 2006-04-11 13:57:49)
Oczywiscie uzycie global jest zaprzeczeniem
OO aczkolwiek czasami jest wygodne

jest zaprzeczeniem OO, ale nie programując obiektowo nie ma przeciwskazań do stosowania global?
Kuziu
Cytat(dr_bonzo @ 2006-04-11 10:34:00)
Cytat
W sumie założenia php czyli każdorazowe odpalanie skryptu na zapytanie nie pozwala na pełną obiektowość php.

Kazdorazowe uruchamianie nie ma zadnego wplywu na mozliwosci obiektowe php -- gdyby php bylo kompilowane to chodzilo by po prostu szybciej (tylko bez ale o zendcompiler i mmturkcache -- wiem ze istnieja).

Chodziło mi raczej o każdorazowe tworzenie tych samych obiektów jak i to że często w php robisz coś w metodzie co do jej zadań nie zależy.

Przykładem może być np. pobieranie przez metodę $forum->showPost(); autora postu jego nicku łaczenie wielu zadań w 1 metodzie co raczej nie bardzo pasuje do programowania obiektowego.

Nie zrobisz przecież przy 100 postach każdorazowo zapytania do $user->getUserNameByID(); czy coś podobnego.

A założeniem obiektowości jest chyba wykonywanie przez metodę tylko i wyłączenie zadań jej przeznaczonych i rozbicie na wiele komunikujących się z innymi, samoczynnie działających obiektów.

Jeśli się mylę to mnie popraw.
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.