•  

    pokaż komentarz

    PHP ma taką wadę, że trzeba się go baaardzo długo uczyć... Samo w sobie to wadą nie jest, ale ponieważ pisać działające skrypty da się po kilku chwilach nauki PHP, większość ludzi PHP nigdy dobrze nie poznaje. I to jeszcze pół biedy. Nawet gorsze jest to, że ci ludzie często później piszą w PHP, w tym FLOSS oraz tworzą tutoriale czy kursy.
    I kończy się tak, że "PHP muli", "PHP ma spapraną składnię", "PHP jest bałaganiarskie" itd. - skrypciarz dobry ("no przecież działa!") tylko gupie PHP nie umi lepiej.

    •  
      e......s

      +1

      pokaż komentarz

      Komentarz usunięty przez autora

    •  

      pokaż komentarz

      @editplus: A co jeśli ci powiem, że kiedyś nie był napisany w PHP? ;-)

    •  
      e......s

      0

      pokaż komentarz

      Komentarz usunięty przez autora

    •  
      e......s

      +6

      pokaż komentarz

      @Ktos:

      http://i.imgur.com/wghf4.gif

      a tak serio to wg mnie

      PHP - easy to learn, hard to master.

    •  

      pokaż komentarz

      Albo można nie uczyć się HTMLa i CSSa i zacząć od HAMLa i SASSa (lub Pythonowych odpowiedników). Choć może to zła porada dydaktyczna :)

      @Ktos: to się zastanów dlaczego teraz jest :D

    •  
      g.............s

      +3

      pokaż komentarz

      @mer:

      Kilka argumentów w linku:

      http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/

      Zgadzam się, że w implementacji każdego języka znajdzie się wiele miejsc zaprojektowanych źle czy niespójnie, albo źle zaimplementowanych. Ale PHP jest na prawdę bardzo dobrym przykładem, jak język programowania nie powinien być zaprojektowany. Oczywiście nie znaczy to, że nie można w nim napisać przejrzystego, spójnego kodu, tylko przypomina to bieg przez tor przeszkód. Działa to także w drugą stronę, jeżeli programista dupa, najszlachetniejszy język programowania nie zrobi z niego geniusza. Najgorzej zaś, jeżeli taki programista bierze się za tworzenie języka.

    •  

      pokaż komentarz

      @mrooczilla: Bo nie znaleźli drugiego programisty Ruby on Rails do rozwoju projektu ;-)

    •  

      pokaż komentarz

      @gluteus_minimus: Niestety połowa argumentów jest odczuciem autora z którym nie mogę się zgodz\ić, ale każdy ma prawo do swojego zdania, Jednak nie lubiestereotypu że php jest złe i łatwe....

    •  
      g.............s

      0

      pokaż komentarz

      @mer:

      Nawet jeżeli połowę z tych argumentów uważasz za odczucia autora z którymi się zgodzić nie możesz, nadal pozostaje druga połowa argumentów z którymi prawdopodobnie się zgodzić nie chcesz.
      Też nie uważam, że PHP jest zły. Jest tylko wystarczająco źle zaprojektowany, żeby z przeciętnego i leniwego programisty zrobić złego programistę. U złego programisty utrwalić jego złe nawyki, a dobrego programistę przyprawić o notoryczne ataki migreny, ataki paniki i reakcje ucieczkowe.

    •  

      pokaż komentarz

      @gluteus_minimus: Połowa nie dosłownie, fakt faktem z 2-3 sie moge zgodzić, ale to nie oznacza że php jest zły i pisanie w nim to katorga

    •  
      g.............s

      +3

      pokaż komentarz

      @mer:

      Poniżej mój prywatny niepełny ranking "zbrodni" :

      @ - uciszenie błędów wywołania funkcji - po co, skoro jest try cacth finally
      \ - PHP dorobił się przestrzeni nazw, to dobrze! Wybrali jednak '\' jako symbol dostępu do namespace! Wiem, zarezerwowali wcześniej, używany powszechnie w tym celu symbol ':' jako token do czegoś innego i udupili się znakiem backslasha, przez co dostęp do przestrzeni nazw może zaiste wyglądać kuriozalnie na przykład: subnamespace\Foo\Bar\foo::staticmethod(). Masakra! I proszę nie przywoływać argumentu o przyzwyczajeniach, bo to jest właśnie utrwalanie tych złych.
      Nadal ma kłopoty ze stwierdzeniem co jest prawdą logiczną a co nią nie jest na przykład:
      ("foo" == TRUE) == TRUE i ("foo" == 0) == TRUE lecz (0 == TRUE) == FALSE, czyli mamy sytuację jakbyśmy mieli dwa rodzaje TRUE różniące się od siebie! Jedziemy dalej.
      Operator "===" - porównuje wartości i typy, lecz nie działa w przypadku obiektów tego samego typu!!! Dają możliwość zdefiniowania/rozszerzenia typu ale nie dają możliwości stwierdzenia wprost, czy dwie instancje tego samego typu są tożsame!
      Kolejny przykład niekonsekwentnej implementacji operatorów:
      (NULL < -1) == TRUE ale (NULL == 0) == TRUE a nawet (NULL > -1) == FALSE. Ta nowa matematyka nie pozwala na prawidłowe posortowanie zbiorów po kolumnach, w których znajdzie się NULL!
      echo jest wyrażeniem, empty() także jest wyrażeniem - nie funkcją!
      Z czasów, kiedy na krótko twórcy PHP inspirowali się chyba Pythonem pochodzi dziwna i mało używana konstrukcja instrukcji warunkowej:
      if (...): ... endif - Tyle, że dla PHP wcięcia nie definiują bloku kodu, musieli więc tego ifa zakończyć, zakończyli endifem. Przy okazji wiemy na co zużyli symbol ":"
      Ze strony: metoda __toString nie może wyrzucać wyjątków, jeżeli spróbujesz wyrzucić wyjątek, PHP wyrzuci... wyjątek! No prawie, tak na prawdę fatal error, który można wyciszyć!
      Osobne funkcje, które wykonują tę samą operację ze zmiennym kierunkiem. Niesławne sortowanie za pomocą sort i rsort - funkcji jest dużo więcej oczywiście: array_multisort, arsort, asort, ksort, krsort, natsort, natcasesort, uasort, uksort, usort. Chcesz posortować tablicę rosnąco? To se wybierz właściwą funkcję motherf@!#er! W stringach jest podobny koszmar, do unicode jest oczywiście osobny zestaw funkcji!
      A propos! Upychanie API do zewnętrznych bibliotek w core języka przez co lista słów kluczowych wymaga osobnego indeksu alfabetycznego. Do tego możesz załadować biblioteki rozszerzające o kolejne API. Nie wiem czy nadal jest tak, żeby dostać certyfikat Zend z PHP trzeba wkuć funkcje i ich parametry w czym PHP także ssie. Dla stringów na przykład, funkcje które wyszukują po ciągach raz mają kolejność parametów "needle, haystack" a raz "haystack, needle".
      To są na prawdę wyjątki z dłuuuugiej listy i to rzeczy podstawowych. Pominę litościwie milczeniem cały OOP w PHP, który PHP4 był niczym zombie, w PHP5 zaś jest niczym jakiś obiektowy Frankenstein pozszywany z wielu różnych języków, ale korpus jest z Javy i tylko ręka jest w miejscu nogi czasami, druga noga ledwo się trzyma, jednak wdzięk tego potwora jest tak duży, że niektórzy nie mogą się oprzeć brnąc coraz dalej w "gęstą" obiektowość PHP. :)

      To są rzeczy, które programowania w PHP nie uniemożliwiają ale też nie ułatwiają, pokusiłbym się o stwierdzenie, że czasami utrudniają wręcz.
      Zgadzam się też, że omijając mało elegancko, wszystkie pułapki zastawione w PHP przez jego twórców, można napisać aplikację, która po zdjęciu tych wszystkich "kładek" i "rusztowań" chroniących przed wpadnięciem w szambo, będzie ładna, zgrabna, spójna i kunsztem będzie przypominać szwajcarski zegarek. Pytanie tylko czy byłyby te wszystkie dodatki potrzebne w przypadku użycia innego języka niż PHP.

    •  
      e......s

      0

      pokaż komentarz

      @gluteus_minimus:

      @ - uciszenie błędów wywołania funkcji - po co, skoro jest try cacth finally
      Ułtawienie to nie zbrodnia. Chcesz korzystaj, nie chcesz - niekorzystaj.

      Nadal ma kłopoty ze stwierdzeniem co jest prawdą logiczną a co nią nie jest na przykład: ("foo" == 0) == TRUE lecz (0 == TRUE) == FALSE, czyli mamy sytuację jakbyśmy mieli dwa rodzaje TRUE różniące się od siebie!
      Znajdź różnicę:
      (("foo" == 0) == TRUE)
      (0 == TRUE)
      (("foo" === 0) == TRUE)
      (0 == TRUE)

      Operator "===" - porównuje wartości i typy, lecz nie działa w przypadku obiektów tego samego typu!!! Dają możliwość zdefiniowania/rozszerzenia typu ale nie dają możliwości stwierdzenia wprost, czy dwie instancje tego samego typu są tożsame!
      http://codepad.viper-7.com/htxGZx

      (NULL < -1) == TRUE ale (NULL == 0) == TRUE a nawet (NULL > -1) == FALSE. Ta nowa matematyka nie pozwala na prawidłowe posortowanie zbiorów po kolumnach, w których znajdzie się NULL!
      uuuu to chyba nie lubisz pracować z bazami danych, bo tak samo właśnie jest w bazach danych (przy sortowaniu NULL jest na samym początku, nawet przed minusami)

      echo jest wyrażeniem, empty() także jest wyrażeniem - nie funkcją!
      podstawy podstaw php http://php.net/manual/en/reserved.keywords.php

      Z czasów, kiedy na krótko twórcy PHP inspirowali się chyba Pythonem pochodzi dziwna i mało używana konstrukcja instrukcji warunkowej:
      if (...): ... endif - Tyle, że dla PHP wcięcia nie definiują bloku kodu, musieli więc tego ifa zakończyć, zakończyli endifem. Przy okazji wiemy na co zużyli symbol ":"

      pełen oldschool. Nawet dziś szaleńcy co robią pluginy do WP tworza taką masakre:
      function foo() {
      ?>
      cześć.
      <?php
      }
      niestety to wina ludzi, nie języka że takie potwory tworzą.

      A : jest używany jako:

      $x = 5 > 3 ? 'tak' : 'nie';
      echo $x; // 'tak'

      Ze strony: metoda __toString nie może wyrzucać wyjątków, jeżeli spróbujesz wyrzucić wyjątek, PHP wyrzuci... wyjątek! No prawie, tak na prawdę fatal error, który można wyciszyć!
      jest otwarty bug na bugs.php.net

      Osobne funkcje, które wykonują tę samą operację ze zmiennym kierunkiem.
      ?

      Niesławne sortowanie za pomocą sort i rsort - funkcji jest dużo więcej oczywiście: array_multisort, arsort, asort, ksort, krsort, natsort, natcasesort, uasort, uksort, usort. Chcesz posortować tablicę rosnąco? To se wybierz właściwą funkcję motherf@!#er!
      wetarani php nie mają problemu no i troche na siłę

      W stringach jest podobny koszmar, do unicode jest oczywiście osobny zestaw funkcji!
      wetarani php nie mają problemu, ale nazewnictwo = koszmar, zgodzę się

      A propos! Upychanie API do zewnętrznych bibliotek w core języka przez co lista słów kluczowych wymaga osobnego indeksu alfabetycznego. Do tego możesz załadować biblioteki rozszerzające o kolejne API. Nie wiem czy nadal jest tak, żeby dostać certyfikat Zend z PHP trzeba wkuć funkcje i ich parametry w czym PHP także ssie. Dla stringów na przykład, funkcje które wyszukują po ciągach raz mają kolejność parametów "needle, haystack" a raz "haystack, needle".
      weterani php nie mają problemu

      To są na prawdę wyjątki z dłuuuugiej listy i to rzeczy podstawowych. Pominę litościwie milczeniem cały OOP w PHP, który PHP4 był niczym zombie, w PHP5 zaś jest niczym jakiś obiektowy Frankenstein pozszywany z wielu różnych języków, ale korpus jest z Javy i tylko ręka jest w miejscu nogi czasami, druga noga ledwo się trzyma, jednak wdzięk tego potwora jest tak duży, że niektórzy nie mogą się oprzeć brnąc coraz dalej w "gęstą" obiektowość PHP. :)
      pewne lata życia spędziłem w delphi który bądź co bądź jest obiektowy i śmiem twierdzić że PHP niczego nie brakuje :] weterani php też nie narzekają

      W ramach podsumowania powtórzę:
      PHP - easy to learn, hard do master
      i dodam, że PHP nie jest de best, ale narzekają głównie ci którzy mało w nim robią. Ja PHP nienawidzę PHP za jedną rzecz. Nie wymaga na programiście pisania w jednym standardzie - w czasach frameworków/mvc niby nieakutalne, ale do tej pory widuję różne, najdziwniejsze konstrukcje wykonane przez początkujących programistów.

      A tak generalnie nie rozumiem ŻADNEGO narzekania na pisanie w nowoczesnych językach python/ruby/php/java/c# itd. ja zapraszam do cofnięcia się w czasie i przysiadkę do asm. ludzie wtedy nie narzekali :]

      pozdrawiam :)

    •  

      pokaż komentarz

      O typy chodzi, jeżeli mamy patrzeć na prawdy logicznie, to w C++ masz definiowalne rzutowanie obiektu na dany typ, kiedy występuje nieścisłość co do istnienia kilku konwersji wykluczających się w celu porównania co do wartości logicznej, to musisz narzucić określone rzutowanie, a że PHP ma automatyczne typowanie zmiennych, to przyjął sobie zasadę taką, a nie inną, że String zrzucony na int daje na 0. Zawsze możesz wymusić rzut na boolean.
      Czyli (int)String=(int)0, (int)0==(int)0 => True.
      Oraz (boolean)String=(boolean)1, (int)0=(boolean)0 => 1==0 => False

      Tak już jest i tyle. Widać, że goście są nieprzyzwyczajeni do takich rzeczy tylko za rączkę trzeba prowadzić.
      Bo mu kompilator uwagi nie zwróci, że jest niejawna konwersja.

    •  

      pokaż komentarz

      @gluteus_minimus @editplus
      Co lepsze - jest to udokumentowane i nie każdy String tak się zachowuje.
      http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion

      To jednoznacznie czyni z tego Feature tego języka, a nie nieścisłość.

      The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero).

      A konwersja przy porównaniu następuje na typ elementu z prawej strony operatora. Z rzutujcie to 0 z prawej strony na (bool)/(boolean) i jest dobrze bez jawnego rzutowania stringa.

    •  
      g.............s

      +1

      pokaż komentarz

      @editplus:

      Zgadzam się, że ułatwienia to nie jest zbrodnia ale język programowania powinien być spójny. Albo masz dziwny operator @ albo try... catch. Co do operatora porównania, w ten sposób można mnożyć w nim znaki "=" w nieskończoność, na przykład "====" mógłby sprawdzać dodatkowo nie tylko typ ale czy instancja klasy jest identyczna a "=====" czy instancja klasy jest tożsama z inną instancją, której klasa jest jednocześnie jej rodzicem... itd, itp. Czujesz ten prowadzący do eksplozji symboliki absurd? Bardzo lubię pracować z bazami danych o ile mi ułatwiają pracę (a propos ułatwień). Wiem, przynajmniej w bazach na których pracuję, czego mogę się spodziewać po wartości NULL w kontekście sortowania. PHP w tym temacie pozostawia pewną dowolność i mam wrażenie, że nie wynika ona z jakiegoś dogłębnego przemyślenia jak powinny się takie typy zachowywać w różnych kontekstach. Co do znaku ":", który używany jest jak widać w różnych miejscach i znaczy coś innego w różnych kontekstach... to dla czego jako znak dostępu do namespace wybrano znak "\"? Bo chcą być oryginalni? Czy może z powodu bizantyjskiej konstrukcji języka, znak ":" już się "wyeksploatował"? Albo sposób myślenia twórców PHP jest przerażający albo aktualna implementacja jest wielką kulą błota. Tak, w swojej pracy nauczyłem się omijać z gracją te "PHP dziwne przypadki" i prawie ich nie zauważam, choć zdaję sobie sprawę, że dłuższe przemyślenia nad konstrukcją języka nie zmuszałyby programistów a w tym mnie do ich stosowania. Nie mówię, że PHP się nie nadaje, uważam tylko, że stanowi zły przykład, zwłaszcza dla początkujących. A przy okazji. Argument o weteranach PHP, jakiekolwiek byśmy nie zdefiniowali metryki czyniącej z programisty weterana, nie jest srebrną kulą miażdżącą zdrowy rozsądek. To, że "weterani" jak mówisz, nie narzekają to nie znaczy, że nie mają wyrobionej opinii.

    •  

      pokaż komentarz

      @gluteus_minimus: Obudziłem się i przeczytałem to wyzej
      -Namespace'y moim zdaniem są takie jak powinne być, poprostu pisze mi siewygodnie, Np w symfony sam palec pisze mi bundle i ścieżkę do modelu itp,. nie narzekam.
      Przyrównywanie obiektów- niestety prawda
      Z resztą nie zgadzam siebez żadnej dyskusji bo moim zdaniem te argumenty troche na starej wersji php opierane.

  •  
    L..........u

    +24

    pokaż komentarz

    mi tam do hakowania html starczy

  •  
    m....k

    +22

    pokaż komentarz

    Są dwa rodzaje języków programowania - te, na które wszyscy narzekają oraz te których nikt nie używa.

Dodany przez:

avatar renholder dołączył
374 wykopali 11 zakopali 22.2 tys. wyświetleń
Advertisement