Booleans Uppercase so với chữ thường trong PHP


134

Khi tôi học PHP, tôi đã đọc ở đâu đó rằng bạn nên luôn luôn sử dụng các phiên bản chữ hoa của booleans, TRUEFALSE, bởi vì các phiên bản chữ thường "bình thường" truefalse, không "an toàn" để sử dụng.

Bây giờ đã được nhiều năm và mọi tập lệnh PHP tôi đã viết đều sử dụng phiên bản chữ hoa. Bây giờ, mặc dù, tôi đang đặt câu hỏi rằng, vì tôi đã thấy rất nhiều PHP được viết bằng phiên bản chữ thường (ví dụ Zend Framework).

Là / Đã bao giờ có một lý do để sử dụng phiên bản chữ hoa, hoặc hoàn toàn ổn khi sử dụng chữ thường?

chỉnh sửa: Quên đề cập rằng điều này áp dụng cho NULLnulllà tốt.


4
Có một số trang web nói rằng viết chữ thường được cho là "nhanh hơn nhiều", nhưng không trích dẫn bất kỳ nguồn nghiêm trọng nào. Quan tâm để xem liệu có bất cứ điều gì đi lên.
Pekka

2
Đo không phải sự thật. Tôi đã thử nghiệm nó với 5 lần lặp và cả hai đều cho kết quả như nhau, 0,5 giây trên PC của tôi: P
Alex

9
@Alex Pekka cũng có thể có nghĩa là văn bản thực tế của booleans chữ thường nhanh hơn. Điều đó có ý nghĩa, phải sử dụng ít phím hơn. Sự khác biệt là rất nhỏ, mặc dù.
Martti Laine

Xin lỗi, tôi đã vô tình bỏ phiếu sau khi tôi bỏ phiếu cho bạn.
CUỘC SỐNG

1
Một quan sát thú vị: var_export () viết đúng và sai là chữ thường, nhưng NULL là chữ hoa. Đáng yêu hả? 3v4l.org/6Oelk
donquixote

Câu trả lời:


89

Các PHP hướng dẫn chính thức cho biết:

Để chỉ định một chữ boolean, sử dụng các từ khóa TRUE hoặc FALSE. Cả hai đều không phân biệt chữ hoa chữ thường.

Vì vậy, vâng, true === TRUEfalse === FALSE.

Cá nhân, tuy nhiên, tôi thích TRUEhơn trueFALSEhơn falsevì lý do dễ đọc. Đó là cùng một lý do cho sở thích của tôi về việc sử dụng ORhơn orhoặc ||, và sử dụng ANDhơn andhoặc &&.

Các PSR-2 tiêu chuẩn đòi hỏi true, falsenulllà trong trường hợp thấp hơn.


81
Chỉ muốn chỉ ra rằng OR||là các toán tử khác nhau trong PHP (như trong chúng có các ưu tiên khác nhau), như là AND&&. (Vì vậy, ví dụ &&||là ưu tiên cao hơn toán tử gán, nhưng ORANDkhông.)
Johrn

21
Ngoài ra với IDE ngày nay, tôi không thấy lý do để có boolean chữ hoa thuần túy là Công cụ đánh dấu cú pháp cho hầu hết các IDE tách biệt chúng với sự khác biệt lớn.
RobertPitt

37
Tôi thích gõ chữ thường hơn vì vậy tôi không phải giữ phím shift.
ack

6
Tôi cũng thích chữ thường - giống như trong java, nhưng mỗi cái đều có. Tuy nhiên, tôi muốn họ giải quyết theo một cách và chỉ làm cho tất cả chúng ta thay đổi sang cách này hay cách khác !!!!! Đây không phải là một sự linh hoạt tôi thực sự cần phải có!
Ray

5
@Cyril: Có rất nhiều lý do chính đáng để nuông chiều việc ghét PHP (ví dụ như chỉ xem những gì Johrn đã đề cập ở trên, tôi không biết điều đó), nhưng về cơ bản là không phân biệt chữ hoa chữ thường, không có gì lạ trong trường hợp hỗn hợp biểu thức là như nhau. Tuy nhiên, điều gì vô nghĩa, nó trộn lẫn sự nhạy cảm với trường hợp và sự không nhạy cảm với trường hợp không nhạy cảm chung. (Xem ví dụ: stackoverflow.com/questions/5643496/ Google )
Sz.

110
define('TRUE', false);
define('FALSE', true);

Chúc mừng gỡ lỗi! (PHP < 5.1.3 (2 tháng 5 năm 2006) , xem Bản trình diễn )

Chỉnh sửa: Các phân tử chữ hoa là hằng số và chữ thường là giá trị. Bạn quan tâm đến giá trị, không phải trong hằng số, có thể dễ dàng thay đổi.


Eliminated run-time constant fetching for TRUE, FALSE and NULL

author      dmitry <dmitry>
            Wed, 15 Mar 2006 09:04:48 +0000 (09:04 +0000)
committer   dmitry <dmitry>
            Wed, 15 Mar 2006 09:04:48 +0000 (09:04 +0000)
commit      d51599dfcd3282049c7a91809bb83f665af23b69
tree        05b23b2f97cf59422ff71cc6a093e174dbdecbd3
parent      a623645b6fd66c14f401bb2c9e4a302d767800fd

Cam kết d51599dfcd3282049c7a91809bb83f665af23b69 (và 6f76b17079a709415195a7c27607cd52d039d7c3 )


7
-1 vì A) điều này là vô nghĩa. B) điều này không trả lời câu hỏi. và C) Tôi đã chấp nhận câu trả lời đúng và điều này không đưa ra bất kỳ thông tin hữu ích bổ sung nào .
Austin Hyde

36
Sau đó, để tôi giải thích chi tiết: các chữ viết hoa là hằng số và chữ thường là các giá trị. Bạn quan tâm đến giá trị, không phải trong hằng số, có thể dễ dàng thay đổi. Vì vậy, nếu bạn đã nghĩ một chút về văn bản và không vội vàng đưa ra một hình phạt, có lẽ bạn đã hiểu điều này.
Radu

13
Tôi hiểu điểm bạn đang thực hiện (bây giờ), nhưng cách ban đầu bạn thực hiện nó là (IMO) khó hiểu và vô nghĩa. Nếu ban đầu bạn chỉ thực hiện chỉnh sửa câu trả lời của mình, tôi sẽ đánh giá cao, vì thực sự đây là một điểm rất tốt.
Austin Hyde

4
Đây là câu trả lời đúng. Nên đã nhận được điểm cho điều này.
giun nối tiếp

22
Đối với các chỉnh sửa, mô tả đó là một chút sai lạc ... Các giá trị thực tế bản thân (mà có được biên soạn thành tokens T_NULL, T_TRUET_FALSEvào thời điểm phân tích), là case-insensitive, vì vậy sử dụng NULLkhông phải là thực sự là một "hằng số" --- trừ khi bạn làm cho nó một hằng số, sử dụng define(). Đơn giản chỉ cần sử dụng NULLhoặc TRUEkhông có nghĩa là nó là một hằng số, vì nếu không có hằng số như vậy, PHP diễn giải nó là nghĩa đen. Một mô tả chính xác hơn là các phiên bản chữ thường không thể được xác định lại, trong khi bất kỳ biến thể trường hợp nào khác có thể .
Joe

31

Sử dụng chữ thường.

  1. Nó dễ dàng hơn để gõ. (IMO)
  2. Nó dễ đọc hơn. (IMO)
  3. Booleans JavaScript là chữ thường và phân biệt chữ hoa chữ thường.

6
+1; Tôi chỉ nói về việc thêm đối số Javascript: vì RẤT phổ biến trong lập trình web để viết cả mã PHP và JS, các cơ ngón tay phát triển web phát triển tốt tiếp tục áp dụng thường xuyên trường hợp chữ cái được sử dụng trong ngữ cảnh ngôn ngữ cuối cùng. Ít nhất tôi thường thấy mình viết TRUE hoặc FALSE bằng Javascript sau khi chuyển từ PHP. Sử dụng chữ thường trong PHP đã sửa cái này cho tốt.
Sz.

11

Nếu bạn có ý định sử dụng JSON, thì RFC7159 nói:

Tên theo nghĩa đen PHẢI là chữ thường. Không có tên nghĩa đen khác được cho phép.

Từ danh sách các thay đổi không tương thích ngược trong PHP 5.6 :

json_decode () hiện từ chối các biến thể không phải chữ thường của chữ JSON đúng, sai và null mọi lúc, theo đặc tả JSON

Theo tiêu chuẩn PSR-2 :

Từ khóa PHP PHẢI ở dạng chữ thường.

Các hằng số PHP đúng, sai và null PHẢI ở dạng chữ thường.


Đúng, nhưng câu hỏi này đặc biệt liên quan đến các booleans chữ hoa / chữ thường trong PHP , không phải JSON. Ví dụ, cả hai json_encode(TRUE)json_encode(true)năng suất 'true'.
Austin Hyde

3
Xin lỗi vì đã đề cập đến JSON, sẽ tốt hơn nếu tôi xóa tất cả các tham chiếu đó và chỉ đề cập đến PSR-2?
Mandrake

4
Tôi nghĩ rằng tham chiếu đến JSON là phù hợp, vì bạn thường xuyên sử dụng javascript / JSON với PHP và có thể đang tìm kiếm sự thống nhất.
Doug Kress

9

Tôi đã từng thực hiện các booleans TRUE / FALSE kiểu C giống như tất cả các const, trong tất cả các mũ, cho đến khi tôi vào bandwagon PSR .

Mục 2.5 của PSR-2:

Các hằng số PHP đúng, sai và null PHẢI ở dạng chữ thường.

Vì vậy, về cơ bản, nếu bạn muốn chơi đẹp với các chi tiết kiểu nguồn mở, Booleans phải viết thường.


5

Nó không quan trọng, truegiống hệt như TRUE. Cùng đi cho falsenull. Tôi đã không nghe nói rằng nó sẽ có vấn đề bất cứ lúc nào.

Cách duy nhất bạn có thể làm mọi thứ rối tung lên là trích dẫn các giá trị đó, ví dụ:

$foo = false;   // FALSE
$bar = "false"; // TRUE

$foo2 = true;   // TRUE
$bar2 = "true"; // TRUE

$foo3 = null;   // NULL
$bar3 = "null"; // TRUE

Chỉ có điều hạn chế hoặc khuyến khích bạn sử dụng chữ hoa hoặc chữ thường có thể là hướng dẫn mã hóa của công ty hoặc của chính bạn. Ngoài ra, bạn có thể tự do sử dụng một trong hai và nó sẽ không dẫn đến bất kỳ vấn đề nào.


FALSE và NULL không giống nhau. is_null () không trả về true nếu giá trị === FALSE.

9
@Noah Goodrich, tôi không hề ám chỉ điều đó falsenullsẽ giống nhau. Tôi đã nói rằng "cùng đi falsenull", có nghĩa là cả hai có thể được thể hiện bằng chữ in hoa hoặc in hoa.
Tatu Ulmanen

5

Tôi đã viết mã đơn giản để kiểm tra sự khác biệt giữa falseFALSE : Mỗi lần lặp lại đang làm một cái gì đó:

    for ($i = 0; $i < self::ITERATIONS; ++$i) {
       (0 == FALSE) ;
    }

Đây là kết quả:

Iterations: 100000000
using 'FALSE': 25.427761077881 sec
using 'false': 25.01614689827 sec

Vì vậy, chúng ta có thể thấy rằng hiệu suất được chạm nhẹ vào trường hợp booleans - chữ thường nhanh hơn. Nhưng chắc chắn bạn sẽ không nhìn thấy.


Công cụ JS gì? Ngày nay, JS được biên dịch trong bộ nhớ trước khi thực thi.
Tiberiu-Ionuț Stan

1
PHP được mã hóa trước khi thực hiện và không có sự khác biệt về thời gian. Một câu trả lời khác chỉ ra rằng trên nhanh hơn. Sự khác biệt về độ lớn này trong bất kỳ thử nghiệm nào cũng nên được bỏ qua - sự khác biệt này là 2,5e-7 mỗi lần lặp.
Doug Kress

4

Cá nhân tôi đã luôn sử dụng mẫu chữ thường, nhưng không vì lý do cụ thể nào ngoài việc làm cho mã của tôi trông gọn gàng, nơi duy nhất tôi sử dụng chữ in hoa là khi tên lạc đà đặt tên lớp và tên biến.

Một lợi thế của việc sử dụng chữ hoa xuất hiện trong tâm trí là chúng dính ra và dễ dàng tìm thấy trong mã.


2
+1 cho gọn gàng. Tất cả truyền thống mũ đến từ C, nhưng đã đến lúc chúng ta thoát khỏi hình thức xấu xí đó.
Petruza

2

Tôi bắt gặp câu hỏi cũ này trong khi tự hỏi mình điều tương tự. Điểm tốt với định nghĩa ('TRUE', false); xác định ('FALSE', true); Không áp dụng cho php5 mặc dù. Viết những dòng đó trong mã php5 giống như viết bình luận.


6
Chỉ để tham khảo trong tương lai, bạn đã đăng bài này dưới dạng "câu trả lời". Trên StackOverflow, không giống như các diễn đàn truyền thống, các bài đăng đàm thoại không thực sự đóng vai trò là giải pháp cho câu hỏi và không cung cấp thông tin hữu ích nên được đăng dưới dạng nhận xét cho câu hỏi ban đầu hoặc câu trả lời có liên quan. Trong trường hợp này, bài viết của bạn sẽ phù hợp hơn với một nhận xét về câu hỏi của tôi hơn là một câu trả lời.
Austin Hyde

8
thực sự hữu ích khi biết điều này không còn hoạt động nữa trong PHP 5: P
Alex

1

Đây là TEST của tôi trên Windows 7x64bit Apache / 2.4.9 PHP / 5.5.14

$blockLimit = 50;
while($blockLimit > 0): $blockLimit--;

//STAR Here ================================================

$msc = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   echo (FALSE);
}
echo 'FALSE took ' . number_format(microtime(true)-$msc,4) . " Seconds\r\n";
$msc = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   echo (false);
}
echo 'false took ' . number_format(microtime(true)-$msc,4) . " Seconds\r\n";

echo "\r\n --- \r\n";
//Shutdown ==================================================
endwhile;

Lần này FALSE đã thắng 20 lần. Vì vậy, chữ hoa nhanh hơn trong môi trường của tôi.

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.