Tại sao các hàm và phương thức trong PHP không phân biệt chữ hoa chữ thường?


107

Các hàm và phương thức trong PHP không phân biệt chữ hoa chữ thường như được minh họa trong ví dụ sau.

function ag()
{
    echo '2';
}

Ag();
class test {
    function clMe()
    {
        echo 'hi';
    }
}

$instance = new test;
$instance->clme();

Nhưng đó không phải là trường hợp với các biến. Cơ sở lý luận là gì?


161
PHP không cần cơ sở lý do khó hiểu!
Max Shawabkeh

2
"Bởi vì người bán súp nói như vậy." Không có lý do, nhưng tham chiếu: php.net/manual/en/functions.user-defined.php (giữa ví dụ 3 và 4), php.net/manual/en/language.variables.basics.php
outis

2
class Share{ share($str){ echo $str; } } $sh = new Share(); $sh->share("string");Bạn có thể ngạc nhiên khi thấy hai lệnh gọi hàm share ($ str). cái đầu tiên vì c'tor và cuộc gọi rõ ràng thứ hai vì những lý do giống nhau !!
vivek.m

1
@outis, Ý bạn là "soup man" là gì?
Pacerier

1
@outis, bạn đang đề cập đến "Soup Nazi" từ Seinfeld. YouTube , Wikipedia
Kevin Traas

Câu trả lời:


98

Hãy để tôi trích dẫn từ Phỏng vấn - Người tạo ra PHP, Rasmus Lerdorf

Phiên bản đầu tiên của PHP là một bộ công cụ đơn giản mà tôi đã tổng hợp lại cho Trang web của mình và cho một vài dự án. Một công cụ đã thực hiện một số thao tác ghi nhật ký vào cơ sở dữ liệu mSQL, một công cụ khác hoạt động như một trình thông dịch dữ liệu biểu mẫu. Tôi đã kết thúc với khoảng 30 chương trình CGI nhỏ khác nhau được viết bằng C trước khi tôi phát ngán với nó, và kết hợp tất cả chúng thành một thư viện C duy nhất. Sau đó, tôi đã viết một trình phân tích cú pháp rất đơn giản sẽ chọn các thẻ từ các tệp HTML và thay thế chúng bằng kết quả đầu ra của các hàm tương ứng trong thư viện C.

Trình phân tích cú pháp đơn giản dần dần phát triển để bao gồm các thẻ điều kiện, sau đó là các thẻ vòng lặp, các hàm, v.v. Không lúc nào tôi nghĩ rằng tôi đang viết một ngôn ngữ kịch bản. Tôi chỉ đơn giản là thêm một chút chức năng vào trình phân tích cú pháp thay thế macro. Tôi vẫn đang viết tất cả logic kinh doanh thực tế của mình bằng C.

Tôi đã đọc ở đâu đó rằng vì tất cả các hàm được giới thiệu về cơ bản giống như các thẻ trong tài liệu HTML và vì các thẻ HTML không phân biệt chữ hoa chữ thường, nên anh ấy đã chọn tên hàm trong PHP để không phân biệt chữ hoa chữ thường. Sau đó, tính năng này vẫn còn trong ngôn ngữ.


66
Tôi cũng nhớ một câu trích dẫn từ Rasmus trong một hội nghị PHP ở Paris ít nhiều nói rằng: "Tôi chắc chắn không phải là một lập trình viên giỏi, về mặt tuân theo các quy tắc hoặc tiêu chuẩn mã hóa nghiêm ngặt, nhưng tôi có thể nói rằng nếu bạn dựa vào phân biệt chữ hoa chữ thường để nhận ra một tên chức năng từ một tên chức năng khác, bạn đang gặp rắc rối nghiêm trọng! "
Tom Desp

1
nó có còn phân biệt chữ hoa chữ thường trong tương lai không?
vee

4
Vì vậy, đó là lý do tại sao các lập trình viên php sử dụng gạch dưới thay vì camelcase khi đặt tên cho các hàm của họ.
paperstreet7

2
@ paperstreet7 Một số thì có. Những người tốt thì không. Ít nhất, không còn nữa.
Dan

13
@dan, rất nhiều lập trình viên "giỏi" sử dụng dấu gạch dưới. Trên thực tế, PSR-0 không cố ý đưa ra khuyến nghị. Một lập trình viên giỏi chọn gạch dưới hoặc dấu camelcase và tuân theo quy ước đó. Việc đưa ra lựa chọn đó để đánh giá liệu một người có phải là một lập trình viên giỏi hay không là điều khá ngớ ngẩn.
jdp

34

Có, tên các hàm và phương thức không phân biệt chữ hoa chữ thường.

Và có, tên biến phân biệt chữ hoa chữ thường.

Tôi không chắc là có lý do cho điều đó - ngoại trừ nó đã diễn ra theo cách này trong một thời gian dài, và vì vậy, vẫn vậy, vì lý do tương thích ngược.



Để tham khảo, một vài liên kết / trích dẫn đến các trang khác nhau của sách hướng dẫn:

Đối với các chức năng ( trích dẫn ) :

Lưu ý: Tên hàm không phân biệt chữ hoa chữ thường, mặc dù thường gọi các hàm khi chúng xuất hiện trong khai báo là một hình thức tốt.

Và các phương thức không hơn nhiều so với các hàm trong các đối tượng - đặc biệt là khi chúng ta nghĩ về PHP 4 và khả năng tương thích ngược.


Và, đối với các biến ( trích dẫn ):

Các biến trong PHP được biểu thị bằng ký hiệu đô la theo sau là tên của biến. Tên biến có phân biệt chữ hoa chữ thường.

Và các thuộc tính đối tượng không hơn nhiều so với các biến trong đối tượng - nhận xét tương tự về PHP 4 và khả năng tương thích ngượ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.