+1

PHP Sadness : What , Why and How to avoid (Part 1 )

Khi mới tiếp xúc với PHP, tôi đã thật sự yêu thích ngôn ngữ này.Ôi những ngày khi xưa ta bé ... Nếu bạn từng lượn lờ những diễn đàn dành cho lập trình viên, hẳn bạn đã ko ít lần thấy cảnh PHP bị "ném đá" không thương tiếc. Và thật đáng buồn khi càng tìm hiểu, có vẻ như những tiếng xấu về PHP không phải là không có cơ sở. Ta hãy cùng điểm qua một lượt.

Đầu tiên, hãy cùng gỡ bỏ những lớp rào phòng thủ của PHP. Nếu bạn thuộc phe ủng hộ PHP, có lẽ đây sẽ là những lí lẽ thường được dùng tới.

Ưu điểm của PHP. Liệu đó có đúng là ưu điểm ?

PHP có thể được deploy một cách dễ dàng ?

Điều này có thể đúng, nhưng hãy tự hỏi, liệu công việc deploy chiếm bao nhiêu phần trong toàn bộ quá trình phát triển ? Và phát triển trên các ngôn ngữ khác cũng có thể deloy được một cách dễ dàng, tùy thuộc vào công cụ hỗ trợ bạn lựa chọn. Xem ra, ưu điểm này của PHP, nếu có, cũng không mang lại cho bạn nhiều lợi ích.

PHP dễ học ?

Khi mới bắt đầu, đây có lẽ sẽ là điều bạn thấy tuyệt vời nhất ở PHP. Mọi thứ thật dễ dàng, suôn sẻ. Tuy nhiên, qua năm tháng, bạn sẽ thấy, việc nắm bắt được những tính năng cơ bản của một ngôn ngữ ( đủ để làm công việc "chân tay to" ) là rất đơn giản, đối với mọi ngôn ngữ. Một ngôn ngữ muốn đánh giá có thân thiện , dễ học hay không, có lẽ nên dánh giá qua hệ thống documents của nó. Và official documents của PHP không hề tốt.

Cộng đồng PHP tốt hơn ?

Đông hơn, thì có thể đúng. Còn tốt hơn thì chưa chắc. Chưa kể, do có rất nhiều điểm yếu ( xem phía dưới ) , nên càng ngày, PHP càng ít nhận đc thiện cảm từ cộng đồng.

Bad things about PHP : My list will go on

Muốn biết một ngôn ngữ tốt hơn ngôn ngữ khác hay không, hãy xét đến những khía cạnh cao hơn. Hãy cùng điểm qua một vài đặc tính được cho là phải có ở một ngôn ngữ lập trình tốt

Dễ dự đoán (predictable)

Recalling the exact syntax for the built-in stab() function, you make a sane assumption and call shoot(GUN, FOOT); The foot shoots your gun.

Một ví dụ khá hài hước về sự khó dự đoán trong systax của PHP.

  • Đôi khi do cách đặt tên quá không tốt parse_str()
  • Hay khi function empty() chẳng liên quan đến việc string có rỗng ( length =0 ) hay object rỗng hay ko .
$ php -r 'error_reporting(-1); $a=(object)(array()); var_dump(empty($a));'

sẽ in ra bool(false)

$ php -r 'error_reporting(-1); $a="0"; var_dump(empty($a));'

sẽ in ra bool(true)

Tính ổn định (consistent)

Lẽ ra, những hàm tương tự nhau nên có systax tương tự nhau, và những hàm systax tương tự nhau nên có chức năng giống nhau ? Hãy xem PHP làm thế nào nhé

Tính ổn định (reliable)

Khi mới học PHP, bạn có thể sẽ rất yêu thích đặc điểm DynamicTyping của nó.

Nhưng bạn có biết, hệ quả của nó là toán tử == như trong hình dưới đây ?

cheatssheetsdesign25.jpg

Hay ,bạn có biết, đoạn code này

 var_dump("61529519452809720693702583126814" == "61529519452809720000000000000000");

sẽ in ra bool(true) . Nhìn thì có vẻ không hợp lí lắm nhỉ :v .

Dễ debug (debuggable)

Một ngôn ngữ lập trình tốt phải debug dễ dàng . Trong khi đó , thông báo lỗi của PHP phải nói là đã trở thành huyền thoại. Làm một ví dụ nho nhỏ nhé, mở của sổ command line ra , gõ thử đoan code ngắn sau :

$ php -r '::'

Bạn có hiểu thông báo lỗi ko ?

PHP Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM) in Command line code on line 1

Hiểu hả ? 1622753_869179259767394_3259155918330994087_n.jpg

Để đi sâu vào giải thích chi tiết tại sao lại có những chuyện kia, có lẽ cần phải thêm 32h report nữa , hoặc có lẽ khi nào bài này lên hot page thì mình có hứng viết, thế nên hẹn khi khác nhé. Tiếp theo chỉ là một vài ( trong số rất nhiều ) nguyên nhân, tại sao PHP lại có vẻ tệ như thế.

WHY? PHP, WHY?

Đầu tiên, có lẽ phải nói, PHP tệ, vì PHP vốn không được phát triển một cách có kế hoạch. ( Xem chi tiết thêm tại bài phỏng vấn cha đẻ của PHP tại đây )

Well, I didn’t plan PHP. I think in terms of solving problems, not in terms of software projects. I actually hate programming, but I love solving problems. (Thật ra thì tôi không lên kế hoạch cho PHP. Tôi chỉ nghĩ theo kiểu,làm sao để giải quyết vấn đề, chứ không nghĩ theo hướng phát triển dự án phần mềm. Thực tế ra, tôi còn ghét công việc lập trình là đằng khác, tôi chỉ thích việc giải quyết những vấn đề thồi )

Rasmus: "In the end, what I think set PHP apart in the early days, and still does today, is that it always tries to find the shortest path to solving the Web problem. It does not try to be a general-purpose scripting language and anybody who’s looking to solve a Web problem will usually find a very direct solution through PHP. Many of the alternatives that claim to solve the Web problem are just too complex. When you need something up and working by Friday so you don’t have to spend all weekend leafing through 800-page manuals, PHP starts to look pretty good." (Nói cho cùng thì, tôi nghĩ thứ làm nên sự khác biệt của PHP trong những ngày đầu, cho đến tận hiện tại, đó là , nó luôn tìm cách ngắn gọn nhất để giải quyết những vấn đề phát triển Web . Mục đích của nó không nhằm hướng tới một thứ scripting language có thể giải quyết một vấn đề . Đa số những vấn đề mà PHP giải quyết được đều có cách giải quyết khác, tuy nhiên chung thường là quá phức tạp. Khi mà bạn cần phải có sản phẩm sẵn sàng vào thứ 6 tới, bạn sẽ không có thời gian để mà ngốn cả cuốn manual 800 trang, đó là lúc mà PHP bắt đầu trở nên hấp dẫn với bạn.

Ban đầu, PHP đc tạo ra như là một templating language for HTML . Tác giả của nó tạo ra PHP, để nhằm mục đích tối cao là giải quyết công việc một cách nhanh chóng và tiện lợi . Những bất tiện tiềm ẩn, những điểm tiềm năng có thể gây ra lỗi trong quá trình phát triển .ai.. Tóm lại là những phát sinh trong tương lai dài , ngăn chặn những chuyện đó không phải là ưu tiên số một của PHP. Mục đích đầu tiên của PHP là giúp người dùng có thể nhanh chóng bắt nhịp với công việc phát triển web. Thế nên, nhìn một cách tổng thể, ngôn ngữ PHP mang lại cảm giác rất chắp vá, cần đến đâu đắp thêm vào đến đấy, không được hệ thống một cách liền mạch từ trên xuống dưới như các ngôn ngữ khác kiểu như Ruby, Python.

Lối đi nào cho người nông dân

Vậy, chúng ta có nên từ bỏ PHP ? Không ,câu trả lời chắc chắn là không . Về mặt kinh tế, các sản phẩm sử dụng PHP vẫn còn rất nhiều , và những sản phẩm đó sẽ cần phải đc maintain , nâng cấp. Đội ngũ lập trình viên có trình độ từ thấp đến cao của PHP vẫn rất đông đảo, PHP vẫn CÓ THỂ đáp ứng được hầu hết mọi nhu cầu của một dự án, thế nên, trong tương lai, PHP vẫn là một ngôn ngữ có chỗ đứng trên thị trường. Vậy, chúng ta phải làm gì ? Bài viết này đã chỉ ra một vài những hạn chế nổi bật của PHP, trong bài viết tiếp theo vào 16h kế tiếp, chúng ta sẽ cùng điểm qua những biện pháp, lmà thế nào để có thể code ngon lành trong PHP. Trong khi chờ đợi, mọi người có thể tham khảo thêm về những bài viết sau ( bài viết này chủ yêú đi chôm ý tưởng từ những nguồn đó bê về tổng hợp lại )


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí