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ó.
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ó.
Câu trả lời:
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.
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 ( __autoload
hoặ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 strtolower
và thích.
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
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
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.
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!