Dikirim oleh ShiningRay pada tanggal 3 April 2006
Edwin Martin < [email protected] >.
Diterjemahkan oleh: ShiningRay @ Nirvana Studio
Saya telah mengembangkan aplikasi PHP selama empat tahun terakhir. PHP sangat mudah untuk ditulis. Namun PHP juga memiliki beberapa kelemahan yang sangat serius.
Di bawah ini saya akan memberikan alasan saya mengapa PHP tidak cocok untuk situs web yang lebih besar dari situs amatir kecil.
1. Dukungan yang buruk untuk rekursi Rekursi adalah sebuah mekanisme di mana fungsi dapat memanggil dirinya sendiri. Ini adalah fitur canggih yang dapat mengubah sesuatu yang rumit menjadi sesuatu yang sangat sederhana. Contoh penggunaan rekursi adalah quicksort. Sayangnya, PHP tidak pandai dalam rekursi. Zeev, seorang pengembang PHP, mengatakan: "PHP 4.0 (Zend) menggunakan pendekatan tumpukan untuk data padat daripada pendekatan tumpukan. Ini berarti bahwa jumlah fungsi rekursif yang dapat ditoleransi jauh lebih terbatas dibandingkan bahasa lain." . Ini adalah alasan yang sangat buruk. Setiap bahasa pemrograman harus memberikan dukungan rekursi yang baik.
2. Banyak modul PHP yang tidak thread-safe Beberapa tahun yang lalu, Apache merilis server web versi 2.0. Versi ini mendukung mode multi-threading, di mana satu bagian perangkat lunak dapat menjalankan beberapa bagian secara bersamaan. Penemu PHP mengatakan bahwa inti PHP adalah thread-safe, tetapi modul non-inti mungkin tidak. Namun sembilan dari sepuluh, Anda ingin menggunakan modul ini dalam skrip PHP, namun hal ini membuat skrip Anda tidak kompatibel dengan mode multi-threaded Apache. Inilah sebabnya tim PHP tidak menyarankan menjalankan PHP dalam mode multi-threaded Apache 2. Dukungan mode multi-threaded PHP yang buruk sering disebut-sebut sebagai salah satu alasan mengapa Apache 2 tetap tidak populer.
Silakan baca pembahasan ini: Slashdot: Situs yang Menolak Apache 2?.
3. PHP rusak karena alasan bisnis Dengan menggunakan caching, kinerja PHP dapat ditingkatkan hingga 500% [lihat benchmark]. Jadi mengapa caching tidak dibangun di PHP? Karena Zend sang pembuat PHP menjual Zend Accelerator miliknya sendiri, sehingga tentu saja mereka tidak mau membuang produk komersilnya.
Tapi ada alternatif lain: APC (Zend kemudian meluncurkan Zend Optimizer, akselerator gratis - penerjemah)
4. Tanpa namespace Bayangkan seseorang membuat modul PHP untuk membaca file. Salah satu fungsi dalam modul disebut membaca. Kemudian modul orang lain dapat membaca halaman web, yang juga berisi fungsi read. Maka kita tidak bisa menggunakan kedua modul ini secara bersamaan, karena PHP tidak mengetahui fungsi mana yang ingin digunakan.
Namun ada solusi yang sangat sederhana, yaitu namespace. Seseorang pernah menyarankan untuk menambahkan fitur ini ke PHP5, tapi sayangnya dia tidak melakukannya. Sekarang, tanpa namespace, setiap fungsi harus diawali dengan nama modul untuk menghindari konflik nama. Hal ini menghasilkan nama fungsi yang sangat panjang, seperti xsl_xsltprocessor_transform_to_xml, yang membuat kode sulit untuk ditulis dan dipahami.
5. Karakter format tanggal non-standar Banyak programmer yang familiar dengan karakter format tanggal, yang berasal dari bahasa UNIX dan C. Beberapa bahasa pemrograman lain telah mengadopsi standar ini, tetapi anehnya, PHP memiliki kumpulan karakter format tanggal yang sama sekali tidak kompatibel. Di C, "%j" mewakili hari dalam setahun, dan di PHP mewakili hari dalam sebulan. Namun, yang lebih membingungkan lagi: fungsi strftime dan fungsi date_format Smarty (mesin templat PHP populer) menggunakan karakter pemformatan C/UNIX.
6. Lisensi yang Membingungkan Anda mungkin berpikir bahwa PHP itu gratis, begitu pula semua modul PHP yang disebutkan dalam manual. Salah! Misalnya, jika Anda ingin membuat file PDF dalam PHP, Anda akan menemukan dua modul di manual: PDF dan ClibPDF. Namun keduanya berlisensi komersial. Jadi, untuk setiap modul yang Anda gunakan, Anda harus memastikan bahwa Anda menyetujui lisensinya.
7. Aturan penamaan fungsi tidak konsisten. Beberapa nama fungsi terdiri dari beberapa kata. Umumnya ada tiga kebiasaan kombinasi kata:
penyambungan langsung: getnumberofiles
Pisahkan dengan garis bawah: get_number_of_files
Hukum Unta: getNumberOfFiles
Untuk sebagian besar bahasa, pilih salah satu dari ini. Tapi PHP digunakan.
Misalnya, jika Anda ingin mengubah beberapa karakter khusus menjadi entitas HTML, Anda akan menggunakan fungsi htmlentities (menyambung kata secara langsung). Jika Anda ingin menggunakan fungsi sebaliknya, Anda perlu menggunakan adiknya html_entity_decode. Untuk beberapa alasan khusus, nama fungsi ini memiliki kata-kata yang dipisahkan dengan garis bawah. Bagaimana ini bisa terjadi? Anda tahu ada fungsi yang disebut strpad. Atau dia str_pad? Setiap kali Anda harus memeriksa apa simbolnya atau hanya menunggu kesalahan. Fungsinya tidak membedakan huruf besar dan kecil, jadi untuk PHP tidak ada perbedaan antara rawurldecode dan RawUrlDecode. Ini juga buruk karena keduanya digunakan dan terlihat berbeda sehingga membingungkan pembaca.
8. Kutipan ajaib yang hebat Kutipan ajaib dapat melindungi skrip PHP dari serangan injeksi SQL. Ini bagus. Namun karena beberapa alasan, Anda dapat mematikan konfigurasi ini di php.ini. Jadi jika Anda ingin menulis skrip yang fleksibel, Anda selalu perlu memeriksa apakah referensi ajaib aktif atau nonaktif. "Fitur" seperti itu seharusnya membuat pemrograman lebih mudah, namun nyatanya malah membuatnya lebih rumit.
9. Kurangnya kerangka standar Sebuah situs web yang berkembang tanpa kerangka keseluruhan pada akhirnya akan menjadi mimpi buruk pemeliharaan. Kerangka kerja dapat membuat banyak tugas menjadi lebih mudah. Model kerangka kerja yang paling populer saat ini adalah model MVC, yang memisahkan lapisan presentasi, logika bisnis, dan akses database.
Banyak situs web PHP tidak menggunakan model MVC. Mereka bahkan tidak punya bingkai. Bahkan sekarang ada beberapa kerangka kerja PHP dan Anda dapat menulisnya sendiri. Artikel dan manual tentang PHP tidak memperbaiki kerangka kerja tersebut. Meskipun pengembang JSP menggunakan kerangka kerja seperti Struts dan pengembang ASP menggunakan .Net, sepertinya konsep ini dipahami secara luas oleh pengembang PHP. Ini menunjukkan betapa profesionalnya PHP sebenarnya.
Meringkaskan
Apa masalahnya?
Untuk proyek yang sangat kecil, ini bisa menjadi bahasa pemrograman yang sangat memuaskan. Namun untuk proyek yang lebih besar dan kompleks, PHP menunjukkan kelemahannya. Saat Anda terus menjelajah, Anda akan menemukan solusi untuk beberapa masalah yang saya sebutkan. Jadi, ketika solusinya sudah diketahui, mengapa tidak memperbaikinya? Juga mengapa perbaikan ini tidak disebutkan dalam manual?
Untunglah bahasa open source sangat populer. Namun sayangnya, ini bukan bahasa yang bagus. Saya berharap semua masalah akan teratasi suatu hari nanti (mungkin dalam PHP6?), dan kemudian kita akan memiliki bahasa open source yang open source dan mudah digunakan.
Saat ini, ketika Anda ingin memulai proyek dengan lebih dari 5 halaman skrip, Anda sebaiknya mempertimbangkan C#/ASP.Net atau Java/JSP atau mungkin Python juga merupakan pilihan yang lebih baik.
Sumber artikel ini: http://workgroup.cn/CS/blogs/php/archive/2006/06/29/1354.aspx