Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Porównanie obiektowego i strukturalnego PHP
Forum PHP.pl > Forum > Przedszkole
Asig
Witam.

Szukam od godziny w google jakiegoś przykładu skryptu w PHP obiektowym i strukturalnym dla porównania i nie mogę znaleźć.
Osobiście piszę w PHP strukturalnym i mam zamiar zacząć się uczyć obiektowego, dlatego chciałem porównać oba typy ze sobą na podstawie tego samego.

Będę wdzięczny jak ktoś napisze taki sam skrypt w obu typach.

Dziękuję i Pozdrawiam.
rad11
  1. class Hello{
  2.  
  3. public function hello(){
  4. echo "Hello World";
  5. }
  6.  
  7. }
  8.  
  9. $obj = new Hello();
  10. $obj->hello();
  11.  
  12. function hello(){
  13. echo "Hello World";
  14. }
  15.  
  16. hello();
  17.  
  18.  


Nie pisz glupot takich ze nie mogles znalesc haha.gif
Turson
@rad11, echo w funkcji i metodzie to nie jest dobry przykład
ghastblood
Moim zdaniem jest to bardzo dobry przykład bo nie ma sensu pisać jakiegoś skomplikowanego kodu. Programowanie obiektywe trzeba poprostu zrozumieć, skoro kolega chce sie nauczyć oop to niech otworzy artykuły na ten temat poczyta i zacznie pisać jak będzie miał problemy będzie mozna mu pomoc. A jak artykuły mu nie wystarcza to widocznie nie ogarnia jeszcze programowania strukturalnego. Patrząc z przymrużeniem oko to obiekty są zbiorami funkcji(metodami) które odpowiadają za pewne czynności czy napisze w php funkcje checkFile(); czy storze metodę w klasie to kod będzie praktycznie taki sam, jedyna różnica będzie użycie zmiennym bo w metodzie to będzie $this->zmienna; a nie $zmienna. Wystarczy usiąść i poczytać trochę.
Asig
Cytat(ghastblood @ 9.12.2014, 10:41:57 ) *
Moim zdaniem jest to bardzo dobry przykład bo nie ma sensu pisać jakiegoś skomplikowanego kodu. Programowanie obiektywe trzeba poprostu zrozumieć, skoro kolega chce sie nauczyć oop to niech otworzy artykuły na ten temat poczyta i zacznie pisać jak będzie miał problemy będzie mozna mu pomoc. A jak artykuły mu nie wystarcza to widocznie nie ogarnia jeszcze programowania strukturalnego. Patrząc z przymrużeniem oko to obiekty są zbiorami funkcji(metodami) które odpowiadają za pewne czynności czy napisze w php funkcje checkFile(); czy storze metodę w klasie to kod będzie praktycznie taki sam, jedyna różnica będzie użycie zmiennym bo w metodzie to będzie $this->zmienna; a nie $zmienna. Wystarczy usiąść i poczytać trochę.


Właśnie szukałem w internecie i nie znalazłem podobnego przykładu co zapodał rad11 chociaż długo szukałem, jedna z przykładowych fraz: https://www.google.pl/search?hl=pl&q=po...VIJayLpRutqBoAc

Czytałem długo na temat tego obiektowego PHP i właśnie pomyślałem - WTF? - nie widzę żadnego sensu jego stosowania choć tyle osób go używa.

Ponieważ PO CO, do czego potrzebne jest PHP obiektowe? Jedyne moje obecne zauważenia są takie, że kod jest dłuższy i nie ma niczego, czego nie można osiągnąć z strukturalnym PHP.
Jedyne czego się dowiedziałem z poradników to to, że kod jest "niby" łatwiej utrzymać w porządku i łatwiej się można połapać potem w kodzie. Ja natomiast uważam, że kwestią porządku jest po prostu dobre rozplanowanie kodu, bo jak za przeproszeniem na odpie**** napisze ktoś kod czy w PHP obiektowym czy strukturalnym to i ten kod i ten trudno będzie ogarnąć.

Naprawdę usiadłem na dość długo, czytałem różne poradniki oraz ZA i PRZECIW i nadal nie rozumiem Z CZYM to PHP obiektowe jest lepsze.

Zacytuję np. jedną opinię:
Cytat
Programowanie obiektowe:
+ izolacja kodu
+ dziedziczenie
+ jak dobrze napisane - reużycie kodu
+ porządek
+ modne smile.gif
- narzut wydajnościowy
- większy rozmiar kodu
- tendencje do budowania przesadnych struktur

Programowanie strukturalne:
+ prostota
+ brak narzutu wydajnościowego
- łatwo można (ale nie trzeba) zrobić bałagan
- w wielu "nowoczesnych" językach nie ma możliwości pisania strukturalnego


Czyli, z tego wynika, że każdy piszę w czym mu wygodniej - jednej osobie jest wygodniej w obiektowym a drugiej w strukturalnym.

Np. napisałem CAŁE forum w PHP strukturalnym - i nie ma z nim ani problemów z wydajnością ani nie miałem większych problemów z napisaniem w nim czegokolwiek a kod napisałem dość elegancko i w niczym się nie gubię ( http://wpcb.pl )
Obecnie trochę muli jedynie przez zabezpieczenia na serwerze i ataki DDoS.

W takim razie pytanie - PO CO jest PHP obiektowe? Czy tak jak to ja rozumiem, że JEDEN woli to a DRUGI tamto?

Pozdrawiam.
in5ane
Chodzi o to, że programowanie obiektowe jest bardziej rozszerzalne. Łatwo też zrozumieć kod osobie, która go nie pisała - łatwiej będzie jej coś dopisać. Siadając do obcego kodu strukturalnego naprawdę ciężko czasem się połapać. Nie mówie, że w OOP jest banalnie, bo to też zależy, jak programista napisał klasę czy metody.

Najważniejsze jest również to, co jest rzadko poruszane/omawiane. W programowaniu obiektowym tworzymy klasy, w niej metody i następnie tworzy się obiekty wykorzystujące dane klasy. I to jest ważne, co to jest obiekt? Obiekt jest to swego rodzaju typ danych. Tak jak masz string, integer, array, to tak samo masz obiekt.

Jak będziesz chciał zrobić np. zbiór danych o samochodach. Czyli masz markę, marka ma kilka modeli, każdy model ma kilka podmodeli (inne silniki itp.) to musiałbyś stworzyć olbrzymią tablicą array w programowaniu strukturalnym. Zarządzanie taką tablicą na pewno do łatwych zadań nie będzie należało.

Ciężko to trochę wytłumaczyć - nie jestem dobrym nauczycielem. Na podstawie swojego doświadczenia, co mógłbym Ci doradzić. Ja nauczyłem się OOP dopiero, gdy wziąłem pod jakąś aplikację framework do jej budowy. Wiedziałem, że jest on napisany obiektowo. Wiedziałem również, że nic nie wiem na ten temat (gdyż, tak jak Ty, gdy próbowałem się uczyć OOP z kursów/poradników/tutoriali to to olewałem i się zastanawiałem po co to). Pisząc aplikację we framework'u opierasz się o dokumentację lub gotowe rozwiązania lub ewentualnie jakieś tutoriale. I pisz sobie tą aplikację, będziesz poznawał cały czas coś nowego. I w między czasie w końcu zaczniesz komuś na co to komu te klasy, metody i obiekty. Ja zacząłem od frameworka CodeIgniter (który jest kiczem!), ale na początek był to świetny wybór. Szybko to ogarnąłem. Później nauczyłem się frameworka Kohana, w którym piszę do dziś w sumie. W międzyczasie liznąłem Laravel, Symfony 2. I dziś? Nie wyobrażam sobie, aby miało nie być programowania obiektowego. Czasem gdy mam coś do napisania, jakiś skrypt coś wykonujący. To od razu zaczynam pisać do tego klasę. Mając taką klasę, możemy ją wydzielić do osobnego pliku i tylko includować i tworzyć na niej obiekty. Wniosek? Łatwo przenosić kawałki kodów. Np. tworzysz klasę do generowania formularzy. Jeśli całą logikę zawrzesz w klasie, to możesz ją swobodnie przenosić pomiędzy aplikacjami. Ba, możesz udostępniać te klasę innym użytkownikom, którzy widząc ja pierwszy raz na oczy i mając mini dokumentację, czyli jakie należy wywołać metody będą mogli jej używać w ogóle nie zwracając uwagi na to, jaki jest w środku kod.

Reasumując. Jak najbardziej zaleca się pisania swoich aplikacji obiektowo. Gdybyś liznął inne języki programowania, to od razu byś to wiedział. Bo nie oszukujmy się, PHP jest dość ubogi w stosunku do np. Javy czy C#. Ostatnio piszę również większą aplikację w Go. Tam programowanie obiektowe wygląda troszkę inaczej, ale również tego się używa.
Asig
Cytat(in5ane @ 10.12.2014, 18:15:44 ) *
Chodzi o to, że programowanie obiektowe jest bardziej rozszerzalne. Łatwo też zrozumieć kod osobie, która go nie pisała - łatwiej będzie jej coś dopisać. Siadając do obcego kodu strukturalnego naprawdę ciężko czasem się połapać. Nie mówie, że w OOP jest banalnie, bo to też zależy, jak programista napisał klasę czy metody.

Najważniejsze jest również to, co jest rzadko poruszane/omawiane. W programowaniu obiektowym tworzymy klasy, w niej metody i następnie tworzy się obiekty wykorzystujące dane klasy. I to jest ważne, co to jest obiekt? Obiekt jest to swego rodzaju typ danych. Tak jak masz string, integer, array, to tak samo masz obiekt.

Jak będziesz chciał zrobić np. zbiór danych o samochodach. Czyli masz markę, marka ma kilka modeli, każdy model ma kilka podmodeli (inne silniki itp.) to musiałbyś stworzyć olbrzymią tablicą array w programowaniu strukturalnym. Zarządzanie taką tablicą na pewno do łatwych zadań nie będzie należało.

Ciężko to trochę wytłumaczyć - nie jestem dobrym nauczycielem. Na podstawie swojego doświadczenia, co mógłbym Ci doradzić. Ja nauczyłem się OOP dopiero, gdy wziąłem pod jakąś aplikację framework do jej budowy. Wiedziałem, że jest on napisany obiektowo. Wiedziałem również, że nic nie wiem na ten temat (gdyż, tak jak Ty, gdy próbowałem się uczyć OOP z kursów/poradników/tutoriali to to olewałem i się zastanawiałem po co to). Pisząc aplikację we framework'u opierasz się o dokumentację lub gotowe rozwiązania lub ewentualnie jakieś tutoriale. I pisz sobie tą aplikację, będziesz poznawał cały czas coś nowego. I w między czasie w końcu zaczniesz komuś na co to komu te klasy, metody i obiekty. Ja zacząłem od frameworka CodeIgniter (który jest kiczem!), ale na początek był to świetny wybór. Szybko to ogarnąłem. Później nauczyłem się frameworka Kohana, w którym piszę do dziś w sumie. W międzyczasie liznąłem Laravel, Symfony 2. I dziś? Nie wyobrażam sobie, aby miało nie być programowania obiektowego. Czasem gdy mam coś do napisania, jakiś skrypt coś wykonujący. To od razu zaczynam pisać do tego klasę. Mając taką klasę, możemy ją wydzielić do osobnego pliku i tylko includować i tworzyć na niej obiekty. Wniosek? Łatwo przenosić kawałki kodów. Np. tworzysz klasę do generowania formularzy. Jeśli całą logikę zawrzesz w klasie, to możesz ją swobodnie przenosić pomiędzy aplikacjami. Ba, możesz udostępniać te klasę innym użytkownikom, którzy widząc ja pierwszy raz na oczy i mając mini dokumentację, czyli jakie należy wywołać metody będą mogli jej używać w ogóle nie zwracając uwagi na to, jaki jest w środku kod.

Reasumując. Jak najbardziej zaleca się pisania swoich aplikacji obiektowo. Gdybyś liznął inne języki programowania, to od razu byś to wiedział. Bo nie oszukujmy się, PHP jest dość ubogi w stosunku do np. Javy czy C#. Ostatnio piszę również większą aplikację w Go. Tam programowanie obiektowe wygląda troszkę inaczej, ale również tego się używa.



Większość rozumiem i spodobało mi się to "Łatwo też zrozumieć kod osobie, która go nie pisała - łatwiej będzie jej coś dopisać" więc raczej zacznę się go uczyć.

Jednak w kwestii "zbiór danych o samochodach" się nie zgadzam, ponieważ chyba nikt teraz nie robi list w PHP a pobiera je z bazy danych (tzn. w wielu przypadkach się to robi, ale na pewno nie w takim przykładzie jak podałeś) za pomocą np. mysql_fetch_array albo assoc.
I nie zrozumiałem do końca "Mając taką klasę, możemy ją wydzielić do osobnego pliku i tylko includować i tworzyć na niej obiekty" czy chodziło Ci o używanie klasy w wielu plikach (bo do tego wystarczy zwykłe function) czy o to, że klasy można tak jakby edytować/dodawać do nich pewne rzeczy w różnych miejscach.

Tak czy siak, dzięki za dobrą odpowiedź - naprawdę mi się przydała.

Pozdrawiam.
Forti
Cytat
Jednak w kwestii "zbiór danych o samochodach" się nie zgadzam, ponieważ chyba nikt teraz nie robi list w PHP a pobiera je z bazy danych (tzn. w wielu przypadkach się to robi, ale na pewno nie w takim przykładzie jak podałeś) za pomocą np. mysql_fetch_array albo assoc.


To nie ma nic do rzeczy. Z bazy korzystasz i tutaj i tutaj. Kolega trochę źle sprecyzował przykład.

Mamy samochód - klasa "matka".
Mamy kierownice - atrybut klasy samochód (np. private $kierownica)

Kierownica może się obrazać - metoda klasy samochód (np. public function $kierownicaSieObraca())


Mamy Ford - klasa "córka", która dziedziczy po klasie matce.
Samochód Ford ma kierownice nie okrągłą, lecz kwadratową (LOL) - metoda klasy Ford



Spróbuj to napisać w kodzie strukturalnym. Następnie dodaj kilka producentów i do każdego z nich kilka modeli, jeden np. będzie mieć koła 17", a inny 15". W kodzie strukturalnym będziesz robić coś brzydkiego co nazywa się powtarzaniem kodu wink.gif W dobrze zaprojektowanym obiektowym programie tego nie będzie. Suma sumarum kod obiektowy będzie wydajniejszy (moim zdaniem) i łatwiejszy dla innego programisty.

Teraz wyobraź sobie że masz już CAŁY ten kod strukturalny. Nagle okazuje się, że każdy przegub, wyprodukowany przez fabrykę X, który jest wykorzystywany w kilku nastu modelach z roku YYYY ma wade fabryczną (czyt. BUG w kodzie).

Napisze tylko raz: Powodzenia w zmianach kodu strukturalnego smile.gif W wielu książkach opisują takie sytuacje jako przyczyny upadku nawet dobrych firm (przykł. z "Clean Code", gdzieś na pierwszych ~~ 50 stronach.


edit:
w bazie trzymać będziesz tylko nazwy, czy jakieś drobne ustawienia, typu ile egzemplarzy Ford Fiesta ma np. użytkownik Kowalski.


edit 2:

Twoje forum to masakra jakaś biggrin.gif Sorka, ale nie mogłem:

Cytat
<div style="display: table-cell; width: 62%; padding-right: 12px; vertical-align: top;">
<a style="font-weight: bold; font-size: 14px;" href="?d=10">[...]</a><br>
[...] <a target="_blank" href="[...]">[...]</a><br>
[...]<br>
<i>[...]</i><div style="margin-top: 7px; word-break: break-all;"><a href="?d=57">[...]</a>[...]</div></div>
<div style="display: table-cell; min-width: 100px; width: 15%; padding-right: 12px; vertical-align: middle;">
Tematy: [...]<br>
Posty: [...]
</div>
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.