Cách thức của PHP PHP là gì?


8

Tôi thấy các tham chiếu liên tục đến "Cách", chẳng hạn như mô tả về một khung hoặc ứng dụng cụ thể là "Pythonic", một người nào đó là "hacker Perl" hoặc "mã Ruby thực sự", nhưng đâu là "tin tặc PHP", các ứng dụng "PHP-ic", "phong cách PHP thực sự"?

Điều này làm tôi suy nghĩ - liệu PHP thậm chí có một phong cách xác định? Nói rằng PHP dễ dàng "thay đổi" thành các kiểu khác không được tính, vì điều tương tự cũng xảy ra với bất kỳ ngôn ngữ hợp lý nào.

Bất kỳ đầu vào nhiều đánh giá cao.


3
"Nếu nó vẫn hoạt động, nó vẫn chưa kết thúc"
Sevenseacat

quora.com/How-does-a-programmer-become-a-brogrammer - có lẽ chúng ta có thể gọi nó là "PHmoronic"?
psr

Câu trả lời:


13

Không giống như nhiều ngôn ngữ lập trình khác, PHP không có ý nghĩ thống nhất hoặc tập hợp các ý tưởng cốt lõi: nó bắt đầu như một tập lệnh perl rất thực dụng và các tính năng được thêm vào khi cần, mà không cần quá trình thiết kế chính thức. Kết quả là một ngôn ngữ khá hữu ích và đầy đủ, nhưng bản thân nó không nhất quán. Sự phổ biến rộng lớn của ngôn ngữ làm cho mọi thứ tồi tệ hơn; ngay khi một tính năng mới được giới thiệu, nó thực tế được đặt trong đá, bởi vì mọi người bắt đầu sử dụng nó. Do đó, một vài lỗi thiết kế đã được củng cố và nhóm PHP đã rất khó khăn để khiến mọi người tránh xa chúng - register_globalsmagic_quoteschỉ là hai ví dụ về những điều có vẻ như là ý tưởng tốt vào thời điểm đó nhưng lại lan tràn.

Một yếu tố khác là văn hóa phát triển xung quanh PHP. Khi mức độ phổ biến của nó bắt đầu tăng lên, trường hợp sử dụng điển hình cho PHP là thêm một ít các chức năng phía máy chủ vào các tài liệu HTML tĩnh. Một phần lớn đối tượng mục tiêu là những người có sở thích và không lập trình viên đã sử dụng PHP để thêm một chút nội dung động vào các trang web tĩnh của họ. Văn hóa kết quả là rất thực dụng, không quan tâm nhiều đến việc thiết lập một "cách thích hợp"; trong khi có thể viết PHP khá thanh lịch, một phần lớn cộng đồng người dùng đơn giản là không quan tâm nhiều đến nó, miễn là nó hoạt động.

Ngược lại, các ngôn ngữ như python, ruby, Lisp, C #, Haskell và các ngôn ngữ khác đã có một triết lý ngay từ đầu, và cộng đồng thường chấp nhận nó và thúc đẩy ngôn ngữ sống theo nó. (Trong trường hợp bạn quan tâm, hãy nhập import thisphiên python tương tác). Có một triết lý có nghĩa là có một hướng dẫn sử dụng và mở rộng ngôn ngữ, và nó cũng dẫn đến một cộng đồng đồng nhất hơn - nếu bạn không đồng ý với triết lý đó, bạn có nhiều khả năng chỉ cần bỏ đi và tìm một ngôn ngữ phù hợp với bạn hơn ; cộng đồng kết quả có nhiều khả năng đạt được sự đồng thuận về tất cả các loại.

Điều đó nói rằng, PHP không có điểm mạnh và điểm yếu, cũng như các trường hợp cạnh tối nghĩa; viết mã PHP thành ngữ có nghĩa là sử dụng các điểm mạnh và tránh các điểm yếu và tối nghĩa, giống như với bất kỳ ngôn ngữ nào khác.


Php không nhất quán theo cách nào? Sự đơn giản tuyệt đối của ngôn ngữ dẫn đến một ngôn ngữ cực kỳ trực giao mà bạn không bao giờ phải đoán xem nên sử dụng cú pháp nào. Trong các cấu trúc dữ liệu phức tạp cụ thể (cây, danh sách được liên kết, đồ thị cạnh) được xử lý gần như bằng Python và chắc chắn tốt hơn trong Java hoặc C ++ STL.
James Anderson

3
PHP đặt mọi thứ trong không gian tên toàn cầu; các hàm API khác nhau sử dụng các quy ước đặt tên khác nhau, một số trong số chúng sửa đổi các đối số tại chỗ trong khi các hàm khác trong tình huống tương tự trả về đối số đã sửa đổi, chỉ một nửa các hàm chuỗi của nó có sẵn dưới dạng phiên bản mb_XXX (), có ba loại biến khác nhau quy tắc phạm vi, bạn gọi một hàm để xác định hằng số, bạn có thể (nhưng không phải) gọi một hàm để tạo hoặc đọc một biến toàn cục, tôi có thể tiếp tục từ lâu.
tdammers

@tdammers PHP không đặt "mọi thứ" trong không gian toàn cầu, trong khi nhiều chức năng nằm trong không gian tên toàn cầu, nhiều chức năng khác không - xem, ví dụ, PDO hoặc SPL. Các biến toàn cục, cục bộ và tĩnh tồn tại trong nhiều ngôn ngữ và không có cách nào duy nhất đối với PHP. Bạn có thể định nghĩa các hằng số mà không gọi hàm. Bạn có thể viết một hàm truy cập toàn cầu (đó là điểm có điểm chung) nhưng hoàn toàn không có gì sai với điều đó.
StasM

Tôi nghĩ rằng vì một lý do đơn giản là câu trả lời này thực sự mang lại sự ủng hộ cho những tuyên bố của nó nên được chọn là Câu trả lời hay nhất, nhưng những câu trả lời khác cũng rất hữu ích (và giúp tôi nhận ra một câu hỏi như thế này có thể mang lại bao nhiêu!)
Jonathan Chân

15

Tôi nghĩ khi mọi người nói theo cách của PHP, nó có trọng số âm gắn liền với nó, đó là thuật ngữ chúng tôi đã sử dụng trong một cửa hàng đa giác (Python, C #, Ruby). Chẳng hạn như "just-do-it-and-throw-it-out there", vì trong đó có thể có goto, xử lý tệp bị rò rỉ, lỗ hổng SQL SQL, vòng lặp siêu sâu, hàm 3000 dòng và vẫn được phân loại là ' Cách PHP '. Nếu trong một bài đánh giá ngang hàng có ai đó nói với tôi rằng mã này rất 'theo cách của PHP', tôi sẽ bị xúc phạm nặng nề.

Tôi đánh giá cao điều này sẽ gây ra một số ngọn lửa, vì vậy tôi sẽ thừa nhận rằng đã có người biết sản xuất mã PHP tốt và PHP được sử dụng trong một số trang web sản xuất chính. Tôi chỉ nói những gì đám đông nghĩ và nhìn thấy thường xuyên nhất, ý kiến ​​được thực hiện bởi hành vi của đa số, không phải thiểu số.


5
Điều thú vị là tất cả những gì bạn đề cập hoàn toàn không liên quan gì đến PHP - và cho đến gần đây, nó thậm chí còn không có goto, vì vậy không có khả năng có rất nhiều mã PHP ngoài đó với goto mà nó đặt tên theo một phong cách riêng biệt.
StasM

StasM người ta có thể tạo ra một con quái vật không thể nhầm lẫn, không an toàn hoặc hoạt động kém (hoặc hỗn hợp tất cả) trong bất kỳ ngôn ngữ nào. VM / phiên dịch ngày nay hiếm khi là vấn đề. Điều tôi đang nói là PHP có rào cản thấp đối với sự xâm nhập, ô nhiễm không gian tên toàn cầu và các tính năng / nhược điểm khác của các ngôn ngữ dường như thu hút đám đông của mọi người và dù sao cũng là danh tiếng. Đó là một danh tiếng không thể phủ nhận, tôi chỉ cố gắng chiếu một chút ánh sáng vào đó
sa93

StasM, bạn đã bỏ lỡ điểm, tôi không bao giờ nói nó sẽ bao gồm gotos.
sa93

3
@ sa93 - Tôi là một người hâm mộ php lớn và đã sử dụng nó kể từ php3. StasM khá chính xác - hầu hết mọi người nghĩ rằng đầu ra PHP là kém. Đây là một lý do tốt, hầu hết là. Chỉ cần sống với điều đó, về mặt tích cực, nó làm cho nó khá dễ dàng để tỏa sáng trong hợp đồng php.
Jonno

Tôi đã thấy rất nhiều mã J2EE tệ hơn nhiều so với bất kỳ mã php nào tôi đã thấy.
James Anderson

4

Nếu có một "cách php" thì "Chỉ cần hoàn thành nó!".

Mặc dù php có tất cả các cấu trúc OO hiện đại Các lớp, không gian tên mô-đun, Introspection, v.v. cộng với tất cả các tính năng lập trình động thường được kết hợp với các ngôn ngữ dễ hiểu hơn như Python. Bạn hiếm khi thấy chúng được sử dụng chỉ vì lợi ích của nó, hoặc, thấy các lập trình viên php bị ám ảnh bởi "độ tinh khiết" trong quá trình thực hiện của họ.

Tôi không biết tại sao nên có một sự khác biệt văn hóa như vậy - nhưng nó ở đó.

Có một số điều kinh khủng ngoài kia và điều này có lẽ phản ánh rằng rất nhiều mã "php" là "Ứng dụng web đầu tiên của tôi" hoặc thậm chí là "Chương trình đầu tiên của tôi".

Cá nhân tôi thấy khá dễ đọc / hiểu mã php được viết một cách chuyên nghiệp, nói chung nó dễ đọc hơn nhiều so với các ứng dụng Java sẽ tất cả các lớp Factory của nó và một nửa logic trong các tệp XML.


4

Tôi muốn nói rằng cách PHP là "Lập trình viên băng keo" - vận chuyển nhanh, vận chuyển nhanh, lo lắng về mọi thứ khác sau đó và nhanh chóng sửa lỗi mà không nghĩ đến tương lai. Mặc dù đó không phải là một sự lên án của chính PHP (bạn có thể làm điều đó bằng bất kỳ ngôn ngữ nào), nhưng gần đây các nhà phát triển PHP đã bắt đầu tự hỏi về kỹ thuật phần mềm và các mẫu thiết kế, RẮN, thử nghiệm và tương tự.


2

Tôi muốn nói rằng ý tưởng về PHP là thực tế. Điều đó có nghĩa là gì trong từng trường hợp riêng biệt, thật khó để xác định, nhưng ví dụ, nếu làm một cái gì đó yêu cầu một dạng HTML và năm dòng mã, đừng đặt khung MVC với 20 lớp ở đó. Và ngược lại, nếu bạn phát triển ứng dụng cho 20 triệu người sử dụng, hãy đặt khung ở đó và có logic, trình bày và kiểm soát luồng riêng biệt. Nhưng không có gì đặc biệt về PHP ở đây, vì vậy tôi đoán nó có thể không phải là một câu trả lời thỏa đáng.

Tôi không nghĩ có một kiểu PHP. Cá nhân tôi nghĩ rằng khái niệm rằng có một phong cách phù hợp với tất cả người dùng ngôn ngữ chỉ có ý nghĩa nếu ngôn ngữ có lĩnh vực sử dụng rất hạn chế, điều này chắc chắn không đúng với PHP.

Các ứng dụng cụ thể có kiểu dáng của chúng - ví dụ: nếu bạn nhìn vào Zend Framework, bạn sẽ thấy mã OO rất rõ ràng với các giao diện được xác định, API được kiểm soát, v.v. nơi bạn có thể dễ dàng nhận ra các mẫu thiết kế quen thuộc. Mặt khác, có những ứng dụng sử dụng phương pháp tiếp cận thủ tục hơn, như Drupal.

Tôi hiểu rằng điều đó không mang lại cho bạn nhiều "phong cách PHP thực sự", nhưng điều đó có lẽ là do không có điều đó. Có những thực tiễn tốt nhất, v.v. nhưng đó không phải là điều bạn đang tìm kiếm, tôi sợ.


1

Một số người sử dụng php như một dấu hiệu của sự coi thường - thực tế, cá nhân tôi là một người hâm mộ.

Tuy nhiên, đối với tôi, điều xác định cách tiếp cận php là về cơ bản thiếu bối cảnh ứng dụng. Không có ngữ cảnh ứng dụng được xây dựng so với .NET hoặc thế giới Java.

Điều này dẫn đến các máy chủ php về cơ bản là không trạng thái (miễn là các phiên được chuyển sang một máy chủ khác, ví dụ như đĩa được chia sẻ hoặc db)

Đây là khá nhiều những gì tôi nghĩ khi tôi nghĩ về cách php.


1

Một câu trả lời khác! Lần này nó quan sát nhiều hơn về "văn hóa" lập trình.

PHP ở vị trí tương tự như Javascript (ECMAscript to pedants!) Vào khoảng năm 2002. Một nhóm nhỏ các lập trình viên chuyên gia đánh giá cao sự xuất sắc của nó, ý kiến ​​chung cho rằng đó là một ngôn ngữ kịch bản kém và khó hiểu chỉ hữu ích khi cuộn các biểu ngữ và gây khó chịu cho người dùng với cửa sổ bật lên.

Sau đó, AJAX xuất hiện và đột nhiên cả thế giới kinh ngạc trước sức mạnh và sự tao nhã của Javascript.

Mặc dù không thực sự thanh lịch như Javascript, nhưng php lại chia sẻ rất nhiều sức mạnh và sự đơn giản của ngôn ngữ đó và có một sự đồng thuận tập hợp về cách "chính xác" để lập trình php cho các hệ thống lớn.

Một chỉ số khác cho thấy php tốt như thế nào trong lĩnh vực chuyên môn của nó là thiếu khung cho hầu hết các ứng dụng nghiêm trọng, rất nhiều lập trình viên rất có kinh nghiệm rất vui khi chỉ sử dụng "php" vì nó không có sự hỗ trợ của một khung công tác lớn. Sự phổ biến rộng rãi của các khung công tác và các công cụ hỗ trợ khác cho tôi thấy rằng Java, Python, v.v. đã không đúng và các lập trình viên sử dụng các ngôn ngữ này rất không hài lòng và không chắc chắn về cách tạo ra một ứng dụng web. Tuy nhiên, khi họ thấy cách sử dụng mã php đơn giản thuần túy để triển khai thành công các trang web phức tạp mà không cần cấu hình XML không thể đọc được, phương ngữ mẫu của tháng hoặc, phương ngữ ORM của riêng bạn, họ đưa ra kết luận sai - rằng php phải là xấu vì nó không có lớp IntegerFactory, nội xạ phụ thuộc, v.v.

Trong thực tế, tất cả những điều này được thực hiện dễ dàng trong php và thường được sử dụng nếu được yêu cầu - chỉ là việc triển khai thường là một vài dòng của php và không được các lập trình viên quen với việc làm điều tương tự với số lượng lớn thư viện và API phức tạp.

php rất đơn giản. "Đơn giản" là phần bổ sung cao nhất bạn có thể cung cấp cho một phần mềm và phần khó nhất để đạt được.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.