2010-04-04 10 views
10

Ktoś powiedział, że kiedy twój kod PHP i aplikacja używają zmiennych globalnych, to musi to być kod spaghetti (domyślam się). Często używam WordPressa. O ile mi wiadomo, to najlepsza rzecz w pobliżu świetnego oprogramowania PHP. Używa wielu zmiennych globalnych do interakcji między swoimi komponentami.Jakie są cechy kodu spaghetti?

Ale zapomnij o tym, ponieważ, szczerze mówiąc, to jedyna rzecz, którą znam. Więc jest całkowicie stronniczy, D

Jestem ciekawy, jaka jest charakterystyka kodu spaghetti?

PS: jedyne co wiem to WordPress. Miejmy nadzieję, że może to pomoże komuś dać świetną odpowiedź dla kogoś, kto ma niewielkie doświadczenie w tworzeniu pełnej aplikacji internetowej na PHP (na przykład na stronie Stack Overflow).

+1

co masz na myśli w "zmiennej globalnej"? –

+0

Mam na myśli w tym komentarzu w http://stackoverflow.com/questions/2571474/isset-and-php-global-variable – justjoe

+16

Wordpress jest jednym z ** najgorszych ** przykładów programowania PHP w głównym nurcie, a głównym powodem jest to, że polegają one wyjątkowo silnie na zmiennych globalnych. Mają straszną reputację ze względu na bezpieczeństwo. Zamieszczałam przykłady, dlaczego jest źle, ale już pisałam o tym wiele razy (http://www.phpvs.net/2009/12/08/an-exercise-in-wordpress-integration-or-why- wordpress-sucks /). Jeśli chcesz zdobyć doświadczenie w budowaniu aplikacji internetowych PHP, proponuję zajrzeć do niektórych frameworków PHP, takich jak Zend, Symfony lub CodeIgniter. – zombat

Odpowiedz

17
  • Nie modułowość (wszystko w jednym pliku, klasa, moduł, przestrzeni nazw, pakiet, lub niezależnie od języka używa, aby zapewnić modularność),
  • Mnóstwo goto „s
  • Słaba organizacja,
  • Brak wyraźnego oddzielenia funkcjonalności od celu. (To znaczy, wszystkie klasy lub funkcje)
  • Długie funkcje.
  • Słaba nazwa.
  • Brak spójnego stylu kodowania.
  • Brak wyraźnej umowy między implementacją a klientami kodu. (To znaczy, brak specyfikacji co do wejść, wyjść, warunków wstępnych i końcowych funkcji).
  • Nadmierne poleganie na wewnętrznych strukturach danych z niewielką ilością abstrakcji.
  • Funkcje losowo permutują/modyfikują stan globalny bez żadnej wzmianki o nim w dokumentacji.
  • Brak komentarzy lub dokumentacji niebanalnego kodu.
  • Kod, który jest bardziej skomplikowany niż musi być.
  • Brak ponownego użycia. (dużo zduplikowanego kodu, a.k.a. copypasta)
  • Brak weryfikacji lub testowanie jednostkowe (działa na wiarę).
  • Magiczne liczby.

W istocie, brak konstrukcji i przezorność, a tylko miszmasz z hacki uderzył razem. Dotyczy to dowolnego języka, a nie tylko PHP.

dla kogoś, kto ma małe doświadczenie w tworzeniu aplikacji WWW na pełnym PHP (na przykład na stronie internetowej przepełnienie stosu)

Wystarczy FYI, ale przepełnienie stosu nie został opracowany z PHP.

+0

@alex: co? Zakładam, że każda sieć w tym świecie rozwija się za pomocą PHP; D – justjoe

+2

Zgadnij, znaleźliśmy ten, który nie ma! –

7

Cóż, mówiąc o komentarzu, który napisałeś, wyjaśnienie jest bardzo proste. Używanie operatora sprawia, że ​​źródło zmiennej jest nieznane, podobnie jak inne końcówki makaronu spaghetti. Można go zdefiniować wszędzie. Tak więc, kiedy wywołujesz swoją funkcję, nie masz pojęcia, jaką wartość ma ta zmienna.Zamiast tego bezpośrednie przekazanie zmiennej sprawia, że ​​jest ona prosta i wyraźna:

function hello_testing($conditional_random) { 
    if ($conditional_random)) { 
     echo "foo is inside"; 
    } 
} 

P.S. http://en.wikipedia.org/wiki/Spaghetti_code

+2

Cóż .. nie chodzi tylko o to, że jego źródło jest nieznane, ale nie jest właściwie zamknięte. Jeśli zaczniesz wrzucać wszystko do globalnej przestrzeni, zaczniesz robić spory między nazwami i inne problemy ... – mpen

5

Kod spaghetti ma specyficzne cechy, które odróżniają go od zwykłego słabego kodu. Spaghetti jest niezwykle skomplikowane i niestrukturalne, więc trudno jest śledzić przebieg procesu przez program. To tak, jakby próbować rozplątać makaron w misce bolognese.

Dlatego w tym kontekście często cytowane są oświadczenia GOTO (słowo przerażające!): Instrukcja GOTO przekazuje kontrolę do innej, arbitralnie zdefiniowanej lokalizacji w bazie kodu. Większość języków programowania posiada polecenia, które mogą być nadużywane w celu symulowania zachowania stylu: goto; na przykład używanie wyjątków do implementacji zwykłej logiki biznesowej zamiast obsługi błędów.

Zmienne globalne przyczyniają się do kodu spaghetti, ponieważ wartości są przypisane poza zakresem bieżącego programu. Może to utrudnić ustalenie, gdzie w bazie kodu zmienna jest ustawiona na podaną wartość (lub czy w ogóle jest ustawiona na jakąkolwiek wartość).

Nawiasem mówiąc, użycie instrukcji goto nie oznacza, że ​​program jest spaghetti. Jest całkiem możliwe, aby napisać jasny, dobrze skonstruowany kod przy użyciu goto, wymaga to po prostu dużej samodyscypliny, aby nie nadużywać swojej elastyczności. Nowoczesne języki programowania sprawiły, że jego użycie jest niepotrzebne i niepożądane.

1

WordPress to największy kawałek kodu PHP, jaki widziałem w PHP. Istnieje szokująca mieszanka PHP, HTML, JavaScript i wszystkich rzeczy pomiędzy tymi samymi plikami. Jeśli chcesz inny przykład kodu spaghetti spojrzeć na osCommerce lub Zen Cart.

W rzeczywistości ośmielę się stwierdzić, że znaczna większość aplikacji PHP typu open source to dość szokujące przykłady programowania w PHP. Jeśli chcesz spojrzeć na dobry przykład strukturalny (to znaczy nie-spaghetti), spójrz na framework Yii lub Zend Framework. Struktury takie jak CodeIgniter i Kohana, choć nie są spaghetti, nie są bardzo dobrym przykładem na to, jak budować rzeczy w PHP 5, ponieważ używają wielu funkcji używanych w PHP 4 po prostu dlatego, że nie było lepszego sposobu na ich wykonanie aż do PHP 5 (na przykład , używając dziedziczenia opartego na ścieżce zamiast dziedziczenia prawdziwego obiektu).

Jeśli chcesz mieć dobry przykład programowania proceduralnego, spójrz na: Drupal. To może nie być najlepsza aplikacja PHP, ze względu na złożoność, ale na pewno bije WordPressa i można z nią zrobić wiele takich samych rzeczy.

+0

Ale Kohana została zaprojektowana dla PHP5 i od pierwszego dnia wymaga tego, co przeciwdziała temu, co mówisz na ten temat, nie jest skonstruowane dla PHP5. Jeśli chodzi o WordPressa, to nie jest to MVC, które, jak sądzę, jest rozczarowaniem, tak, jest niezwykłą rzeczą, ponieważ dość dziwnie, jest łatwe do dostosowania i rethemed. To jeden z powodów, dla którego ma więcej hitów Alexy niż Drupal, ośmieliłbym się powiedzieć. Bez wątpienia, Drupal jest trudniejszy do retemowania i dostosowywania niż WordPress, jeśli nie znasz się na tych rzeczach. Zrobiłem jedno i zacząłem od Drupala. – Volomike

+0

-1 dla niepoprawnych informacji o Kohanie. Ta struktura jest jednym z najlepszych przykładów PHP pod względem struktury, stylu kodowania itp. Chociaż początkowo była oparta na Code Igniter, teraz jest zupełnie inna. –

Powiązane problemy