Why PHP sucks.
Με αφορμή ένα facebook status message ενός φίλου (ναι, την μισεί και αυτός :p ), είπα να γράψω οτι είναι στραβό με την PHP κατα την γνώμη μου.
Εχουμε λοιπόν:
- Χιλιάδες functions στο default namespace.
Είναι πραγματικά απίστευτο. Μέχρι πρόσφατα η PHP δεν υποστήριζε namespaces και υπάρχουν κυριολεκτικά χιλιάδες functions στο default namespace. Εντελώς απαράδεκτο. - Unicode. Πού είναι? οεο!
Έχουμε 2009 και η PHP δεν υποστηρίζει Unicode. Μοιάζει μα ανέκδοτο αλλά δεν είναι. - Κανένα database abstraction.
Πόσο δύσκολο είναι ένα καλύτερο API για database access που να μην είναι δεμένο σε μια συγκεκριμένη database? Υπάρχουν διάφορα modules/scripts κλπ για να το λύνουν αυτό , παρόλα αυτά πάρα πολλά project χρησιμοποιούν functions συγκεκριμένες σε μια μόνο database. Και δεν μιλάω για χρήση ORM. Απλά ένα DB API όπως της Python. - Χάος με deprecated functions.
Συχνά functions σπάνε την συμβατότητα, αλλάζουν όνομα και υπάρχουν διαφορετικές και ασύμβατες functions παράλληλα. Παράδειγμα:mysql_*μεmysqli_*καιmysql_escape_stringvsmysql_real_escape_string. - Δεν υπάρχουν στάνταρ στις functions.
Η σειρά των παραμέτρων αλλάζει ανάμεσα σε string μεθόδους. Παράδειγμα - Ασυνεπές περιβάλλον
Με τα .ini αρχεία ο developer δεν μπορεί να γνωρίζει είναι διαθέσιμο και τι όχι.
Επιπλέον, υπάρχουν functions όπως ηmoney_format()που δεν είναι portable και χωρίς σημαντικό λόγο. Η money_format() δεν είναιfork()ή κάποιο system call δεμένο σε μια πλατφόρμα. Γιατί το υλοποίησαν με non-portable τρόπο? - Βλαμμένες χακιές
Πχ magic_quotes. Το magic quotes ήταν μια χαζή ιδέα γεμάτη προβλήματα. Η ιδέα εγκαταλείφθηκε αλλα άφησε τα απομεινάρια της. Ο developer δεν γνωρίζει αν είναι ενεργοποιημένα ή όχι, και πρέπει να ελέγχει μεget_magic_quotes_gpc().
Φυσικά έχουμε και τοregister_globals. Μια ακόμα βλαμμένη ιδέα που καταργήθηκε. Ήταν μια πηγή απο bugs και απο σοβαρά κενά ασφαλείας. Δείτε εδώ για περισσότερα. - Δεν προάγει διαχωρισμό HTML , κώδικα και SQL.
Υπάρχουν MVC frameworks αλλα η συντριπτική πλειοψηφία του PHP κώδικα είναι “όλα αχταρμάς”. Τα περισσότερα βιβλία και tutorial σε μαθαίνουν την λογική όλα μέσα. Για κάθε PHP project που είναι καλά σχεδιασμένο/γραμμένο υπάρχουν άλλα χίλια που θες να βγάλεις τα μάτια σου και να τα φάς.
Αυτή η λίστα περιλαμβάνει μόνο σοβαρά προβλήματα που έχω διαπιστώσει μόνος μου. Μια απλή αναζήτηση για PHP sucks θα φανερώσει πολλά ακόμα προβλήματα.
Η PHP είναι μια άναρχη γλώσσα που δεν σχεδιάστηκε απο την αρχή αλλά εξελίχθηκε βιαστικά και απρόσεκτα για να καλύψει τις ανάγκες των χρηστών της. Η ευκολία της τόσο στην εκμάθηση όσο και στο deployment την έκαναν πολύ δημοφιλή γλώσσα. Αυτό δεν σημαίνει οτι είναι καλή γλώσσα. Είναι μια γλώσσα γεμάτη κακές πρακτικές, bugs, κακό σχεδιασμό , ένα σωρό προβλήματα και παγίδες, ειδικά για νέους χρήστες.
Comments
Το καλύτερο παραδειγμα που έχω ειναι ότι : ‘Αμα βγω στην εθνική εν έτη 2009 με ένα αμάξι είναι normal. ‘Αμα έβγαινα σε κεντρικό δρόμο πριν απο 100 χρόνια με άμαξα θα ήταν normal. Αλλά να βγώ σήμερα εθνική σε άμαξα είναι παραλογο. Πόσο μάλιστα να πηγαίνω και κάθε μέρα στη δουλεία μου με αυτό.
Για τους php-programers: Η php είναι η άμαξα και όχι το αμάξι.
PS: είμαι ο φίλος που την μισώ και εγώ.
Συμφωνώ και εγώ. Ήδη έχω αρχίσει να μαθαίνω Python και Django και αναρωτιέμαι πως άντεχα τόσα χρόνια με PHP. Είναι φοβερό το πόσο πολλά μπορείς να κάνεις και με πόσο λίγο κώδικα με Python και Django.
Να μην ξεχνάμε και το Joomla, το χειρότερο CMS που έχω δουλέψει ποτέ στην ζωή μου, το οποίο φυσικά ειναι φτιαγμένο με PHP
Δεν έχω εμπειρία απο Joomla, but i’ll take your word for it :p
Πριν κανα δυό ημέρες όμως κοίταγα ένα theme για το Wordpress και έπαθα σοκ όταν κατάλαβα οτι το 2009 το Wordpress, που είναι το πιο δημοφιλές blogging software δεν έχει πραγματικά templates. Απλά επαναλαμβάνουν την PHP μεσα στο template. Σύγκρινε με το byteflow που είναι σε Django πόσο όμορφο, απλό και λογικό είναι το να φτιάξεις ένα theme. (άσχετα που είμαι αρχιτεμπέλαρος και δεν το έχω κάνει ακόμα)
Το πρόβλημα είναι οτι ο σχεδιασμός και η φιλοσοφία της PHP ενθαρρύνει σημαντικά αυτό το pattern.
Αν και υπάρχουν MVC frameworks για PHP νομίζω πως όταν αρχίσεις να απομακρύνεσαι απο τις ευκολίες προχειρότητας της PHP τότε η γλώσσα αρχίζει να δείχνει την ασχήμια της. Πχ, Όνομασία functions με στύλ C? Έλεος, η C είχε μια δικαιολογία, τον περιορισμό στο μέγεθος των identifiers. Η PHP τι δικαιολογία έχει?
Και για να το πώ αλλιώς, αν πρόκειται να δουλέψει κάποιος με ένα MVC framework με όλα τα καλούδια και τα όμορφα abstractions, ποιός ο λόγος να προτιμήσει κάτι σε PHP έναντι μιας σαφώς καλύτερης γλώσσας όπως Ruby ή Python?
Comment form for «Why PHP sucks.»