[PHP – Hành trình enterprise] Kỳ I: PHP củ chuối!

Đây là phần đầu tiên trong lọat bài, “PHP – Hành trình enterprise“! Đây là chủ đề mà tôi rất thích nói đến, và đã tranh cãi rất nhiều với các bậc đàn anh. Tôi thì tất nhiên là bênh vực PHP. Trong tâm trạng chờ đợi sự ra đời của PHP6, tôi viết lọat bài này. Nó mang ý nghĩa tổng kết nhiều hơn là đưa ra những “tìm tòi” mới. Bởi thực chất, những người làm PHP nghiêm túc đã nhận thấy những điểm yếu kém cũng như lộ trình cho PHP từ lâu rồi.

Thời gian gấn đây, nếu hay qua lại các khu vực như Zend DevZone, PHPDeveloper.org, bạn sẽ nghe thấy từ “enterprise” rất nhiều! Trước tiên, “enterprise” ở đây có thể hiểu là “enterprise level“, cấp doanh nghiệp.

Loạt bài này mang ý nghĩa tổng kết nhiều hơn là đưa ra những “tìm tòi” mới. Bởi thực chất, những người làm PHP nghiêm túc đã nhận thấy những điểm yếu kém cũng như lộ trình cho PHP từ lâu rồi.

Các ứng dụng web enterprise là các ứng dụng chuyên nghiệp, với performance cao, phức tạp, đáp ứng được các nhu cầu về business như: thương mại điện tử, thanh toán trực tuyến, transaction, hay các tác vụ đòi hỏi mức độ hoạt động mạnh, số lượng user lớn… Về mặt kỹ thuật, chính vì những yêu cầu của mình các ứng dụng enterprise cần phải được xây dựng trong một môi trường chuẩn hóa cao, với công nghệ mạnh và đáng tin cậy.

Rất, rất nhiều người có quan điểm cho rằng PHP chưa đáp ứng được yêu cầu ở mức enterprise. Ở kỳ I này, tôi sẽ đưa ra những dẫn chứng để chứng minh quan điểm của họ là đúng😉.

Củ chuối thứ nhất: Phi chuẩn, lộn xộn, bát nháo, lỏng lẻo…

  • Vâng! Chắc hẳn cũng đã có lúc bạn phải băn khoăn về những vấn đề như magic quote, global register. Tôi tự hỏi, không hiểu họ nghĩ gì mà đưa ra cái tính năng tự động escape các dấu ” hay ‘ khi dữ liệu được input vào! Bởi, nếu vô tình escape thêm một lần nữa thì mọi thứ sẽ trở thành công cốc, như vậy là phải phát sinh thêm một thao tác kiểm tra nữa! Tôi lại tự hỏi, không hiểu họ có ý định gì khi biến tất cả những tham số truyền vào qua HTTP trở thành biến toàn cục. Vậy nếu tôi có 2 tham số POST và GET cùng tên thì biến đó sẽ mang giá trị của tham số nào? 2 vấn đề trên đã cũ rích rồi, nhưng đến nay, vẫn còn rất nhiều lập trình viên phải than thở vì nó.
  • Một câu hỏi đặt ra cho bạn nhé, trong PHP, bạn thường dùng hàm nào để lấy tổng số phần trử trong một mảng? count()? Đúng rồi! Nhưng có nhiều người vẫn sử dụng sizeof() vì cả 2 hàm này có công dụng gần như là như nhau! Tuy nhiên, sao lại lấy số phần tử của một mảng bằng hàm sizeof()? Trong PHP, một string không đồng nghĩa với một mảng của char, và kiểu char không tồn tại, khi bạn dùng sizeof() với một string, rất tiếc nó sẽ trả về 1. Không có bất kỳ một sự thống nhất nào ở đây cả, người ta cũng không khuyên người dùng là nên dùng hàm nào! PHP có quá nhiều thứ trong một, và hẳn nhiên, điều đó đem lại tác dụng ngược. PHP còn không có cả chuẩn cho cách đặt tên API của mình. Mọi thứ cứ lung tung, chồng chéo cả lên. Một đằng thì file_get_contents(), một đằng khác thì move_uploaded_file(), đằng khác nữa thì strtoupper()???
  • Trong một số trường hợp, cặp giá trị 1 và 0 đồng nghĩa với truefalse. Điển hình là bạn có thể dùng toán tử ! với 0 và 1! Như thế là cực kỳ lỏng lẻo, bởi nếu đưa vào tay một người không học hành kỹ lưỡng, hậu quả sẽ khó mà lường trước được…

Củ chuối thứ 2: Hệ thống API non-OOP

PHP có hỗ trợ OOP, nhưng ở đây tôi muốn nói đến một khía cạnh khác, đó là hệ thống API. Hệ thống API của PHP mô phỏng rất nhiều thư viện chuẩn của C, và tất nhiên, đó chỉ là những hàm đơn lẻ. Dẫn đến việc các lập trình viên phải viết lại rất nhiều thứ không cần thiết.

Một ví dụ là hệ thống các API dùng để access vào database!!! Thật là một ác mộng! May mà cuối cùng, một ngày đẹp trời, PDO đã đến!

Củ chuối thứ 3: Không có namespace

Yeah! Việc nhóm phát triển loại bỏ tính năng namespace khỏi PHP5 khi phiên bản này sắp ra đời đã làm cho “ác mộng tên miền” kéo dài thêm vài năm nữa! Bạn cứ thử tưởng tượng đi, chỉ có PHP mới tồn tại các tên lớp có dạng như thế này: Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive!

Vâng, đó là sự thật thưa quý ông quý bà! :( Có ai tưởng tượng nổi là khai báo tên lớp lại phải xuống dòng cơ chứ! Và cho đến nay, việc PHP6 có hỗ trợ namespace hay không vẫn chưa ngã ngũ 100%. Tôi thề, nếu không có, tôi sẽ bỏ PHP!!!

Củ chuối thứ 4: Thiếu rất nhiều tính năng cần có của một công nghệ mạnh

  • Đến PHP5 vẫn chưa hỗ trợ Unicode, dẫn đến việc phải sử dụng thư viện mbstring.
  • PHP vẫn chưa có một thư viện hỗ trợ code caching build-in nào. Bạn phải cài thêm APC hoặc Memcache nếu không muốn nộp tiền cho Zend để mua eAccelerator. May thay, PHP6 đã có APC như một thành phần mặc định.
  • PHP vẫn chưa có những thứ như Java RMI hay .NET Remoting, những công nghệ này là rất cần cho các ứng dụng lớn, chạy trên nhiều server…

Củ chuối thứ 5: Không có một framework chuẩn nào cả

CakePHP, symfony… đã ra đời từ lâu, nhưng đó là các application framework, họ muốn tôi phải làm theo cách của họ! Tôi tìm đâu ra một thư viện chuẩn viết bằng PHP??? Zend Framework vẫn đang còn trong thời kỳ preview release, có gì đáng tin cậy?

___________________________________________________

Như thế là quá đủ! Nếu bạn thích đọc những thứ tương tự, hãy vào google.com, search những cụm từ như: “PHP sucks”, “I hate PHP”…😉

Chào bạn, và hẹn kỳ sau!


About this entry