proste wyjaśnienie PHP OOP vs proceduralne?

106

Chciałbym nauczyć się PHP i chcę uzyskać pomysł na temat OOP i proceduralnych. Czytałem kilka innych blogów i samouczków o OOP vs Procedural, ale nadal nie rozumiem tego podejścia.

OOP vs proceduralne

  1. Czego powinienem się nauczyć?
  2. Jaka jest różnica w kodzie? jakie są efekty?
  3. W jaki sposób framework PHP może pomóc w podejściu OOP? (Chciałbym się nauczyć CodeIgnitera)
  4. Czy procedury wymagają ram?

Naprawdę chcę poznać różnicę w kodzie obu, moje rozumienie OOP jest takie, że tworzysz klasę podobną do i może to być dostęp. (Nie wiem, czy to prawda).

Dzięki!

Pennf0lio
źródło

Odpowiedzi:

279

Kontekst: Poprosiłeś o „proste wyjaśnienie”, które sugeruje:

  1. Chcesz mieć rozsądny przegląd bez żargonu
  2. Chcesz czegoś, co pomoże Ci się uczyć od początku
  3. Odkryłeś, że żadne dwie osoby nigdy nie odpowiadają na to pytanie w ten sam sposób i jest to zagmatwane. To jest powód, dla którego prosisz tutaj o proste wyjaśnienie. Tak?

Krótka odpowiedź bez żargonu:

  1. Wiele wstępnych wyjaśnień przeskakuje szybko do przykładów „OOP z prawdziwego świata”. Mogą one raczej mylić niż pomagać, więc na razie możesz to zignorować.
  2. Możesz myśleć o kodzie źródłowym po prostu jako o „kawałkach” funkcjonalności, które po prostu są zapisywane w pojedynczych plikach.
  3. Istnieją różne sposoby organizowania tych „kawałków”; w zależności od rzeczy, takich jak konwencje języka programowania, tło i szkolenie programisty (-ów) lub po prostu stare osobiste preferencje.
  4. OOP i programowanie proceduralne to po prostu dwie główne, powszechnie uznawane metodologie organizowania i układania tych „fragmentów” kodu.

Długa odpowiedź bez żargonu:

Procedury a OOP to tylko jeden aspekt podstawowej kwestii programowania komputerowego: jak sprawić, by kod był łatwy do zrozumienia i bułka z masłem do profesjonalnego utrzymania . W rzeczywistości możesz napisać kod „proceduralny”, który jest zgodny z niektórymi zasadami OOP, więc te dwie niekoniecznie są przeciwieństwami.

Twoje zrozumienie naprawdę wzrośnie, gdy nauczysz się innych języków programowania zorientowanych obiektowo , wśród których PHP jest „nowym dzieckiem na rynku”.

Oto krótki przegląd tego, czego nauczysz się podczas budowania doświadczenia:

  • Możesz napisać kod źródłowy PHP, który wykonuje przydatne zadania
  • Możesz organizować przydatne zadania w „fragmenty” kodu
  • Możesz myśleć o „kawałkach” kodu niezależnie od poszczególnych plików, w których są zapisywane
  • Czasami te „fragmenty” kodu będą się zachowywać inaczej w zależności od przekazanych parametrów
  • Fragmenty kodu, które akceptują parametry, nazywane są „funkcjami”
  • Funkcje można „podzielić na kawałki” i można to zrobić na różne sposoby:
    • Na przykład: możesz mieć tylko jeden duży plik PHP zawierający wszystkie funkcje, które kiedykolwiek napisałeś w całym swoim życiu, wymienione w kolejności alfabetycznej według nazwy funkcji
    • Na przykład: możesz mieć wiele plików PHP z funkcjami, które są podzielone na kawałki według tematyki [np. Funkcje do wykonywania podstawowych operacji na ciągach znaków, funkcje do przetwarzania tablic, funkcje do wejścia / wyjścia pliku itp.]
  • OOP to specjalny sposób „dzielenia” funkcji razem w „klasę”
  • Klasa to po prostu kolejny poziom „dzielenia” kodu razem, dzięki czemu można go traktować jako ujednoliconą całość
  • Klasę można traktować jako „fragment” metod i właściwości

    • metody to po prostu funkcje, które są ze sobą logicznie powiązane w jakiś znaczący sposób. Słowa „metoda” i „funkcja” to w zasadzie dwa różne terminy na to samo.
    • właściwości to po prostu wartości danych, które są powiązane z klasą. Są to wartości, które celowo nie są izolowane do żadnej indywidualnej funkcji, ponieważ więcej niż jedna funkcja w klasie powinna mieć do nich dostęp.
      • Na przykład : jeśli twoja klasa ma kilka metod uprawiania astronomii, właściwościami klasy mogą być wartości pewnych znanych liczb, o których wszystkie metody astronomiczne muszą wiedzieć (takie jak Pi, prędkość światła, odległość między określonymi planetami, itp.).
    • W tym miejscu większość wyjaśnień OOP jest myląca, ponieważ rozgałęziają się na przykłady z prawdziwego świata ”, które mogą szybko odejść od tematu . Często „rzeczywisty świat” jest eufemizmem dla ontologicznych perspektyw konkretnej jednostki. Zwykle jest to przydatne tylko wtedy, gdy już zrozumiesz tę koncepcję na tyle dobrze, aby nauczyć jej kogoś innego.
    • Aby zrozumieć OOP bez nieporozumień, możesz na razie pominąć przykłady z „prawdziwego świata” i po prostu skupić się na kodzie. Klasa to po prostu sposób na przechowywanie funkcji (aka metod) i właściwości (aka danych) jako kodu PHP w jednej lub kilku powiązanych „porcjach”, gdzie każda pojedyncza „porcja” dotyczy określonego tematu lub elementu funkcjonalności. To wszystko, co musisz wiedzieć, aby zacząć.
  • Klasa jest przydatna, ponieważ umożliwia organizowanie kodu na bardzo wysokim poziomie w sposób ułatwiający zrozumienie, używanie i konserwację.

  • Kiedy ktoś napisał wiele funkcji i zorganizował je w wiele klas i zmusił je do wspólnej pracy w jakiś fajny sposób, pakują całość i nazywają to „Framework” .
  • Framework to kolejny najwyższy poziom „porcjowania” (w tym stylu i konwencji kodowania), na który zgadza się co najmniej jedna osoba, ponieważ podoba im się sposób organizacji kodu i pasuje do ich stylu pracy, preferencji, wartości, planów na świat dominacja itp.

Zobacz też

dreftymac
źródło
1
@dreftymac: mogłeś przekazać mi opinię na temat tego, co można by poprawić w moich dodatkach, zamiast niezręcznie usuwać to za moimi plecami. Naprawdę. Z zadowoleniem przyjmuję konstruktywną krytykę i zapraszam do tego samego.
Flavius,
1
@Flavius ​​OK. Wdzięczność za wysiłek i chwilę na uzupełnienie. Po przemyśleniu tego wydaje się rozsądne, że dodany dodatek zasługuje na własną, samodzielną odpowiedź.
dreftymac
2
Jeden dodatek: klasa jest również przydatna do dzielenia danych funkcji na kawałki, dzięki czemu nie musisz przekazywać jej w parametrach.
chiborg,
1
+1 specjalnie dla Twojej definicji „Framework”. Słyszałem, że wiele osób próbuje wyjaśnić, czym jest framework, i myślę, że twój jest najłatwiejszy do zrozumienia.
TecBrat
1
kolego ... to najlepsze wyjaśnienie, jakie czytałem na temat oop vs proceduralne i dużo przeczytałem! świetna praca naprawdę efektywna, prosta i trafna. masz rację, ludzie zawsze używają przykładów z prawdziwego świata i nie jest to łatwy sposób na zrozumienie czegokolwiek, to jest bzdura!
thechrishaddad
25

OOP to nic innego jak wzorzec projektowy. Jeśli dopiero zaczynasz, naucz się podstaw, koncentrując się na podejściu proceduralnym. Co najważniejsze, zapoznaj się z podstawowymi zasadami, takimi jak pętle, warunki i wywoływanie innych procedur.

Podczas tworzenia kodu proceduralnego wyrób nawyk dodając powiązane metody w jednym pliku źródłowym. Naucz się dzielić swoje procedury na jednostki logiczne, a wtedy już zaczniesz być zorientowany obiektowo. Zasadniczo obiekt to nic innego jak zbiór metod, które są ze sobą powiązane tylko dlatego, że operują na tym samym zestawie danych. (Nie mówię tutaj o bazach danych, ale o danych aplikacji!)

OO służy głównie do uczynienia kodu bardziej logicznym, dzieląc wszystko na proste bloki. Łącząc odpowiednie klocki otrzymujesz kompletną aplikację. OO nie jest srebrną kulą ani złotym młotem, który rozwiąże wszystkie Twoje problemy. Ale to, co robi, sprawia, że ​​kod jest łatwiejszy do zrozumienia.

Z drugiej strony, niektórym ludziom wciąż udaje się zrobić kompletny bałagan z obiektów, po prostu zamieniając je w ogromne super-obiekty za pomocą setek metod. Takie obiekty nie różnią się zbytnio od zwykłego podejścia proceduralnego, po prostu ze względu na ogromną liczbę połączonych ze sobą metod bez żadnej logiki. To błąd, który łatwo popełnić, gdy ludzie zaczynają robić OOP zbyt szybko.

Wim ten Brink
źródło
3
Uważam, że kod OOP jest o wiele bardziej zagmatwany ... spróbuj na przykład zajrzeć do brzucha prestashop.
AndrewC
Świetna uwaga na temat Pretashop. Magento samo w sobie jest parującą bestią, ale zdecydowaliśmy się z nią pozostać, ponieważ alternatywy takie jak Pretashop czy WooComm są jeszcze gorsze.
PKHunter
6

Powinieneś nauczyć się obu. Obiekty są tylko jedną z wielu możliwych abstrakcji, a abstrakcja jest tym, czym ostatecznie jest programowanie. To powiedziawszy, zacznij od rzeczy proceduralnych, a następnie dodaj obiekty później, ponieważ elementy wewnętrzne obiektów PHP i tak są proceduralne.

Jeśli chodzi o ramy; najpierw naucz się podstaw języka, pisz jednorazowe programy eksperymentalne i tym podobne. Później można zapoznać się z ram i zastanowić się , czy ty znaleźć niektóre z nich przydatne w pewnym kontekście. Na pewno nie są obowiązkowe.

Joonas Pulakka
źródło
6

Aby dodać świetne odpowiedzi powyżej. Powinieneś zobaczyć OOP jako naturalny postęp w twoim stylu kodowania - kiedy zaczynasz pisać mały program, być może będziesz musiał po prostu złożyć kilka linii kodu php, a następnie pogrupować je w funkcje, a im więcej funkcji piszesz, możesz poczuć potrzebę aby lepiej zorganizować je w klasy. OOP po prostu pozwól swojej strukturze na lepsze kody - umożliwiając lepszą konserwację kodu.

Rawdreeg
źródło
6

Proceduralne php i oop używają tego samego kodu php. W takim razie jedyną różnicą jest to, że w procedurze skupiasz się na jednym zadaniu i to wszystko. W oop organizujesz swój kod za pomocą wzorców lub fragmentów, które można ponownie wykorzystać w wielu różnych obszarach kodu.

Prosta odpowiedź jest taka, że ​​musisz znać i rozumieć php. Możesz się tego nauczyć na php.net. Kiedy już to zrozumiesz, możesz zacząć organizować swój kod w uchwytach.

Kod proceduralny wykorzystuje funkcje, zmienne.

Gdy już wiesz, co się dzieje, możesz zacząć organizować funkcje i zmienne w klasy. Zaczynamy wywoływać funkcje jako metody i zmienne jako właściwości.

Powodzenia.

Edward Manda
źródło