Các hàm PHP có phân biệt chữ hoa chữ thường không?


100

Tôi đang tìm kiếm một số mã và tôi tìm thấy một số cuộc gọi đến mySQL_fetch_array. PHP có phân biệt chữ hoa chữ thường về tên hàm không? Tôi nhớ đã đọc ở đâu đó nhưng dường như không thể tìm thấy bất kỳ tài liệu tham khảo nào về nó.


1
Không, họ dường như không phải vậy. sở thích thường là chữ thường
Jason

3
Bản sao của stackoverflow.com/questions/2749781/… . Không, chức năng này không trường hợp nhạy cảm
Bob Baddeley

Để tham khảo: nó được chôn ở đây trong php.net/manual/en/functions.user-defined.php ở giữa trong một khối Lưu ý:.
mario

3
Tôi bỏ phiếu để bỏ ngỏ điều này - tiêu đề tổng quát và rõ ràng hơn nhiều, do đó nó có khả năng giúp được nhiều người hơn.
coreyward

Câu trả lời:


100

Tôi trích dẫn từ điều này :

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ì vậy, có vẻ như các hàm do người dùng định nghĩa không phân biệt chữ hoa chữ thường, đã có một cuộc bỏ phiếu cho việc tạo các hàm / đối tượng trong PHP5 phân biệt chữ hoa chữ thường.


3
PHP5 đã ra mắt, hy vọng duy nhất của bạn là PHP6 và tôi không nghĩ họ sẽ thực hiện bước đó. Nó sẽ phá vỡ nhiều để đạt được ít.
Mark Tomlin

3
@Mark Tomlin Tôi không đồng ý. Cách thực hành tốt nhất là duy trì cùng một trường hợp mà sách hướng dẫn có, vì vậy nó sẽ bị hỏng ít, đồng thời tăng độ rõ ràng.
Ben Dauphinee

12
ồ. điều đó thật đáng buồn. mặc dù ImAgEcReAtEfRoMpNg () là một cách tốt đẹp của Obfuscating mã ...
Pontomedon

8
Vì câu trích dẫn có nội dung "không phân biệt chữ hoa chữ thường", tại sao bạn lại nói "Vì vậy, có vẻ như do người dùng xác định có phân biệt chữ hoa chữ thường"? Nếu đó là lỗi đánh máy, bạn thực sự nên sửa nó.
Barmar

11
Chà! Điều này thực sự thú vị khi tìm ra sau 7 năm lập trình!
Daan

34

Không.

Các hàm PHP không phân biệt chữ hoa chữ thường.


19

TL; DR: tên lớp không phân biệt chữ hoa chữ thường, nhưng luôn sử dụng trường hợp giống như trong khai báo (giống như với các hàm). Ngoài ra, việc khởi tạo các lớp với các trường hợp khác nhau như chúng đã được xác định có thể gây ra sự cố với trình tải tự động.


Ngoài ra, tên lớp không phân biệt chữ hoa chữ thường:

<?php
class SomeThing {
  public $x = 'foo';
}

$a = new SomeThing();
$b = new something();
$c = new sOmEtHING();
var_dump($a, $b, $c);

Kết quả này là:

class SomeThing#1 (1) {
  public $x =>
  string(3) "foo"
}
class SomeThing#2 (1) {
  public $x =>
  string(3) "foo"
}
class SomeThing#3 (1) {
  public $x =>
  string(3) "foo"
}

Sự cố đang sử dụng trình tải tự động và hệ thống tệp phân biệt chữ hoa chữ thường (như ext2 / 3/4), trong đó bạn phải gọi tên lớp với cùng một trường hợp tệp chứa lớp được đặt tên (không phải cách đặt tên lớp thực sự), hoặc sử dụng strtolower:

Tệp lớp:

<?php
// filename something.php
class SomeThing {
   ...
}

Hàm autoloader ( __autoloadhoặc một hàm để đăng ký spl_autoload_register)

function my_autloader($className) {
  $filename = CLASSES_DIR . DIRECTORY_SEPARATOR . $className . '.php';
  if (file_exists($filename)) {
    require($filename);
  }
}

Bây giờ với mã này:

$a = new something(); // works
$b = new SomeThing(); // does not work
$c = new SOMETHING(); // does not work

Bạn có thể thực hiện việc này (ví dụ: có tên lớp không phân biệt chữ hoa chữ thường hiệu quả bằng cách sử dụng trình nạp tự động) nếu bạn thêm lệnh gọi đến strtolower()trong mã trình nạp tự động, nhưng cũng như với các hàm, tốt hơn là nên tham chiếu một lớp theo cách giống như nó được khai báo, có tên tệp trùng với tên lớp, sử dụng trình tải tự động, và quên sử dụng strtolowervà thích.


7

Không, chúng không phân biệt chữ hoa chữ thường, tuy nhiên, bạn nên luôn sử dụng trường hợp có trong sách hướng dẫn để có tính nhất quán.

Tuy nhiên, các biến phân biệt chữ hoa chữ thường.


3

Trong PHP, các biến có phân biệt chữ hoa chữ thường nhưng các hàm không có vấn đề gì như thế này, bạn có thể sử dụng các câu lệnh sau để hiển thị kết quả, tất cả sẽ hiển thị cùng một kết quả.

<?php
Echo "This is a test script";
ECHO "This is a test script";
echo "This is a test script";
?>

Mặt khác, nếu bạn thay đổi độ phân biệt chữ hoa chữ thường của các biến thì nó sẽ hiển thị lỗi.

Thí dụ:

<?php
$a=5;
echo $A;// It will show the error.
?>

Đầu ra:

Notice: Undefined variable: A in C:\xampp\htdocs\test.php on line 3

2

Và tên phương thức cũng không phân biệt chữ hoa chữ thường. ví dụ:-

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }

đầu ra:

PHP Fatal error:  Cannot redeclare C::METHOD() in ....php on line 6

1

Kết lại sự hưởng ứng của mọi người. Mặc dù PHP không yêu cầu tính nhất quán của ký tự trong tất cả các trường hợp ngay cả trong PHP5 cho đến bây giờ.

Phương pháp hay nhất sẽ là

luôn sử dụng các trường hợp tương tự khi tham chiếu trở lại một trong hai biến ('bắt buộc) hoặc các hàm (' tùy chọn, nhưng được khuyến nghị).

Bạn không bao giờ biết có thể một ngày nào đó cuộc bỏ phiếu được thông qua và bạn sẽ cứu vãn được toàn bộ cơn ác mộng về các trường hợp thay đổi trong các ứng dụng của bạn được thực hiện cách đây vài năm yêu cầu cập nhật bằng PHP.

Hy vọng nó sẽ giúp trong anyway.


Re "cứu toàn bộ cơn ác mộng về việc thay đổi trường hợp": Không, tôi hiểu là nếu thay đổi được thực hiện, phân biệt chữ hoa chữ thường sẽ là một tùy chọn, được đặt trong php.ini. Do đó bảo toàn khả năng tương thích ngược.
ToolmakerSteve

-2

Có thể điều này là quá muộn, nhưng ...

Mọi người đều đã biết ở đây: PHP engine không quan tâm đến chữ cái.

Và có một cuộc bỏ phiếu về trình xử lý lỗi PHP, trong đó đa số nói: "Vâng, tôi là chuyên gia phân tích chữ hoa chữ thường".

Nhưng tôi ngược lại, bởi vì trong khuôn khổ MVC của tôi, tôi gọi hành động của bộ điều khiển:

    $currentController = new $controller($parameters);
    $currentAction = $currentController->{$action}();

$ controller và $ action được thực hiện từ URL.

Hãy nghĩ xem, nếu người dùng xuất bản một liên kết đến trang web của tôi: https: // my-site / MyPartnerController / MyPartnerGallery

trong khi lớp có tên là myPartnerController ...

Có nghĩa là không ai có được trang này nếu tên các lớp và hàm của PHP phân biệt chữ hoa chữ thường.

Có, tôi luôn sử dụng tất cả các tên trong mã như đã khai báo. Nhưng tôi cầu nguyện rằng họ không bao giờ đặt tên các hàm và các lớp phân biệt chữ hoa chữ thường.

Cảm ơn bạn!


1
điều đó thực sự tồi tệ ... nếu tôi truy cập my-site / myLogInPage / loginsuccess , và thực hiện một vài phỏng đoán về cái mà bạn đã gọi là chức năng đăng nhập thành công mà tôi có, hoặc có thể xóa một vài thứ ....
Tschallacka
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.