2008-09-29 32 views
120

Dường như không có mẫu thực nào cho các hàm được đặt tên, str_replace, strrpos, strip_tags, stripslashes chỉ là một số.Tại sao các hàm dựng sẵn trong PHP được đặt tên ngẫu nhiên?

Tại sao lại xảy ra trường hợp này?

CHỈNH SỬA - điều này không có nghĩa là bài đăng "troll" - chỉ là điều tôi nghĩ mỗi khi tôi sử dụng ngôn ngữ!

+12

Tôi không đồng ý với những người đã bỏ phiếu này. Đó là một câu hỏi hợp pháp. Và câu trả lời đặt ra ở đây có thể đi một chặng đường dài để giúp các nhà phát triển nghèo chịu đựng sự kỳ quặc đặt tên trong PHP. –

+2

Downvotes là một công cụ đặt tên bất thường và lập lại trật tự đã khiến tôi nhiều hơn một lần – ConroyP

+1

Có một phân đoạn nhất định của các nhà phát triển PHP tức giận bất cứ khi nào bất cứ ai hỏi 'ngôn ngữ' của họ. Họ bỏ phiếu bất kỳ câu hỏi nào đưa ra những sai sót trong PHP. – iconoclast

Trả lời

84

Ngôn ngữ PHP đã phát triển một cách hữu cơ, do đó, việc đặt tên cho các hàm là bất tiện trong các phần. Nhiều định dạng khác nhau được giữ lại vì lý do tương thích ngược.

Một phân tích nhỏ, nhưng ngoài các vấn đề đặt tên chức năng, một tác dụng phụ không may khác của sự phát triển hữu cơ của ngôn ngữ là sự mâu thuẫn rõ ràng trong thứ tự đối số, ví dụ: xem xét các chức năng in_arraystrstr:

bool in_array (mixed $needle, array $haystack [, bool $strict]) 

string strstr (string $haystack, mixed $needle [, bool $before_needle=false]) 

Funnily đủ, PHP có vẻ là trong nội bộ phù hợp với các orderings trong đó tất cả các chức năng chuỗi dường như sử dụng $haystack, $needle trong khi chức năng mảng là cách khác xung quanh, nhưng điều này có thể mất một chút làm quen với người mới sử dụng PHP. Có một số post on ExpressionEngine nói về điều này đặc biệt chi tiết hơn, cũng như một discussion on the PHP bugs list.

Như ngôn ngữ trưởng thành, có những nỗ lực khác nhau để thực hiện một quy ước đặt tên cứng nhắc hơn và nhất quán - từ Zend Framework Documentation:

tên hàm phải luôn luôn bắt đầu với một chữ cái thường. Khi tên hàm chứa nhiều hơn một từ, chữ cái đầu tiên của mỗi từ mới phải được viết hoa. Điều này thường được gọi là định dạng "camelCase".

filterInput()

getElementById()

Đối với một hơi khác nhau, từ 20 possible reasons why PHP function names and parameters are weird:

  • keo PHP API và con người với nhau, và đôi khi điều này trở nên lộn xộn

  • Chức năng PHP đã được phát triển trong nhiều trường hợp, som etimes say

  • PHP chức năng đặt tên thuật toán vẫn còn là một bí mật và không thể bị bẻ khóa

  • PHP chọn để cung cấp cho mọi người một cái gì đó thú vị để phàn nàn/blog/cười về

  • PHP có những vấn đề khác để giải quyết

+12

"Chức năng PHP đã được phát triển trong nhiều trường hợp, đôi khi say." mysql_real_escare_string có thể là ví dụ tốt. WTF !? – ciscocert

+2

Chỉ cần nghĩ về nó, nhưng làm thế nào PHP có thể phát triển * vô tình * khi được tạo ra bởi các sinh vật hữu cơ? xD –

+0

@ciscocert: một phần lý do là, không có không gian tên tại thời điểm đó, thực tế là thêm tiền tố 'mysql' vào tên hàm. –

1

Để tương thích ngược qua nhiều lần chỉnh sửa ngôn ngữ

+2

Chúng ta có thể chỉ định nghĩa một tiêu chuẩn mới trong khi để lại những kiểu cũ hơn như là bí danh của những cái mới? –

+0

Chắc chắn, họ có thể.Nhưng chi phí có thể lớn hơn lợi ích –

8

Tính tương thích ngược và thiếu không gian tên, cùng với ngôn ngữ khuấy.

8

Vì ngôn ngữ đã phát triển trong 14 năm qua từ 'Trang chủ cá nhân' thành một trong những ngôn ngữ triển khai trang web phổ biến nhất. Không ai lên kế hoạch cho tất cả các chức năng này; chúng được thêm vào một lần khi cần thiết.

+1

Nếu * bất kỳ * suy nghĩ đã được đưa ra để nhất quán ngay từ đầu, nó sẽ không xảy ra. Không có gì về việc phát triển hơn 14 năm mà gây ra sự bất cẩn như vậy. – iconoclast

0

Điều này có vẻ hơi troll-y. Tuy nhiên, nó là dành cho khả năng tương thích ngược.

PHP6 sẽ giải quyết địa chỉ trợ giúp những vấn đề này cũng như hỗ trợ đầy đủ UTF-8.

0

PHP là ngôn ngữ kịch bản lệnh "cũ", phát triển nhanh, mã nguồn mở. Việc đặt tên chỉ là một vấn đề của lịch sử lâu dài ... Không có công ty "học tập" đằng sau PHP như SUN đằng sau Java, mà kiểm soát việc đặt tên ...

+0

Điều đó không hoàn toàn đúng. Zend là một đóng góp chính cho các bản xây dựng gần đây của PHP và kể từ PHP 4 nó đã được xây dựng trên Công cụ Zend. Trong thực tế, Zend đã được bắt đầu bởi các nhà phát triển viết lại PHP 3. – Wilco

23

Trong lịch sử nhiều chức năng là bản đồ trực tiếp đến các đối tác C của chúng , do đó, rất nhiều sự đặt tên và đối số đặt hàng kỳ quặc trong PHP là do đó.

Những người đóng góp cho PHP thường đóng góp vào ngôn ngữ để đáp ứng nhu cầu của riêng họ, vì vậy ngôn ngữ đã phát triển hữu cơ và đôi khi bị ảnh hưởng nghiêm trọng. Sự phổ biến của nó cũng có nghĩa là nó đã cố gắng duy trì khả năng tương thích ngược trong suốt vòng đời của nó, có nghĩa là các quyết định kém về ngôn ngữ sống ngay cả sau khi chúng không được chấp nhận.

5

Câu trả lời là Evolution hoặc Thiết kế không thông minh. Tôi không chắc chắn điều đó;)

0

Ban đầu PHP chỉ là một ngôn ngữ kịch bản không hỗ trợ hướng đối tượng (PHP 3) nên tên hàm được sử dụng trong PHP tối đa phiên bản 3 và 4 chủ yếu được lấy cảm hứng từ cú pháp PERL. Nhưng PHP 5 có rất nhiều tính năng OO như Reflection, loại hinting, interface, access modifiers và list vẫn tiếp tục. Hầu hết các tính năng mới này được lấy cảm hứng từ JAVA. Ví dụ; thực hiện giao diện và lớp kế thừa giống nhau trong PHP và JAVA. Vì vậy, hầu hết các chức năng mới với phong cách đặt tên và quy ước của họ là dựa trên JAVA. Người ta có thể gọi nó là sự tiến hóa của PHP của một ngôn ngữ kịch bản đơn thuần thành một ngôn ngữ OO mạnh mẽ.

0

Tôi thực sự không thấy nó quan trọng như thế nào. Cú pháp là cú pháp. Có rất nhiều ngôn ngữ của con người, tiếng Anh cho một, nơi mà nó không theo bất kỳ mô hình cụ thể nào nhưng chúng tôi học nó bất kể. Đó là tất cả về việc biết cú pháp của bạn thay vì đoán.

Các vấn đề liên quan