Hướng dẫn dùng null 0 trong PHP

answer

226

Hướng dẫn dùng null 0 trong PHP

Đó là ngôn ngữ cụ thể, nhưng trong PHP:

Nullnghĩa là " không có gì ". Var chưa được khởi tạo.

Falsecó nghĩa là " không đúng trong ngữ cảnh boolean ". Được sử dụng để thể hiện rõ ràng bạn đang giải quyết các vấn đề logic.

0là một int. Không liên quan gì đến phần còn lại ở trên, được sử dụng cho toán học.

Bây giờ, điều khó khăn là trong các ngôn ngữ động như PHP, tất cả chúng đều có giá trị trong ngữ cảnh boolean , (trong PHP) là như vậy False.

Nếu bạn kiểm tra nó với ==, nó đang kiểm tra giá trị boolean, vì vậy bạn sẽ nhận được sự bình đẳng. Nếu bạn kiểm tra nó với ===, nó sẽ kiểm tra loại, và bạn sẽ nhận được sự bất bình đẳng.

Vậy tại sao chúng lại hữu ích?

Vâng, hãy nhìn vào strrpos()chức năng. Nó trả về False nếu nó không tìm thấy gì, nhưng 0 nếu nó đã tìm thấy thứ gì đó ở đầu chuỗi!


Và tất nhiên, nếu bạn đối phó với các trạng thái:

Bạn muốn tạo sự khác biệt giữa DebugMode = False(đặt thành tắt), DebugMode = True(đặt thành bật) và DebugMode = Null(hoàn toàn không đặt, sẽ dẫn đến gỡ lỗi khó ;-)).

226 hữu ích 5 bình luận chia sẻ

answer

46

Hướng dẫn dùng null 0 trong PHP

nullnull. falsefalse. Đáng buồn nhưng là sự thật.

không có nhiều tính nhất quán trong PHP (mặc dù nó đang được cải thiện trên các bản phát hành mới nhất, nhưng có quá nhiều khả năng tương thích ngược). Mặc dù thiết kế mong muốn một số nhất quán (được nêu trong câu trả lời đã chọn ở đây), tất cả đều trở nên khó hiểu khi bạn xem xét phương thức trả về việc sử dụng false/ nulltheo những cách không dễ lý giải.

Bạn sẽ thường thấy null được sử dụng khi họ đã sử dụng false cho một thứ gì đó. ví dụ: filter_input (). Chúng trả về false nếu biến không thành công bộ lọc và null nếu biến không tồn tại (không tồn tại có nghĩa là nó cũng không thành công bộ lọc?)

Các phương thức trả về false / null / string / etc thay thế cho nhau là một sự tấn công khi tác giả quan tâm đến loại lỗi, ví dụ: filter_input()bạn có thể kiểm tra ===falsehoặc ===nullnếu bạn quan tâm tại sao xác thực không thành công. Nhưng nếu bạn không làm vậy, đó có thể là một cạm bẫy vì người ta có thể quên thêm séc ===nullnếu họ chỉ nhớ viết trường hợp kiểm tra cho ===false. Và hầu hết các công cụ kiểm tra / phạm vi bảo hiểm của đơn vị php sẽ không thu hút sự chú ý của bạn đối với đường dẫn mã bị thiếu, chưa được kiểm tra!

Cuối cùng, đây là một số thú vị với kiểu tung hứng. thậm chí không bao gồm mảng hoặc đối tượng.

var_dump( 0<0 );        #bool(false)
var_dump( 1<0 );        #bool(false)
var_dump( -1<0 );       #bool(true)
var_dump( false<0 );    #bool(false)
var_dump( null<0 );     #bool(false)
var_dump( ''<0 );       #bool(false)
var_dump( 'a'<0 );      #bool(false)
echo "\n";
var_dump( !0 );        #bool(true)
var_dump( !1 );        #bool(false)
var_dump( !-1 );       #bool(false)
var_dump( !false );    #bool(true)
var_dump( !null );     #bool(true)
var_dump( !'' );       #bool(true)
var_dump( !'a' );      #bool(false)
echo "\n";
var_dump( false == 0 );        #bool(true)
var_dump( false == 1 );        #bool(false)
var_dump( false == -1 );       #bool(false)
var_dump( false == false );    #bool(true)
var_dump( false == null );     #bool(true)
var_dump( false == '' );       #bool(true)
var_dump( false == 'a' );      #bool(false)
echo "\n";
var_dump( null == 0 );        #bool(true)
var_dump( null == 1 );        #bool(false)
var_dump( null == -1 );       #bool(false)
var_dump( null == false );    #bool(true)
var_dump( null == null );     #bool(true)
var_dump( null == '' );       #bool(true)
var_dump( null == 'a' );      #bool(false)
echo "\n";
$a=0; var_dump( empty($a) );        #bool(true)
$a=1; var_dump( empty($a) );        #bool(false)
$a=-1; var_dump( empty($a) );       #bool(false)
$a=false; var_dump( empty($a) );    #bool(true)
$a=null; var_dump( empty($a) );     #bool(true)
$a=''; var_dump( empty($a) );       #bool(true)
$a='a'; var_dump( empty($a));      # bool(false)
echo "\n"; #new block suggested by @thehpi
var_dump( null < -1 ); #bool(true)
var_dump( null < 0 ); #bool(false)
var_dump( null < 1 ); #bool(true)
var_dump( -1 > true ); #bool(false)
var_dump( 0 > true ); #bool(false)
var_dump( 1 > true ); #bool(true)
var_dump( -1 > false ); #bool(true)
var_dump( 0 > false ); #bool(false)
var_dump( 1 > true ); #bool(true)

46 hữu ích 5 bình luận chia sẻ

answer

26

Hướng dẫn dùng null 0 trong PHP

Dưới đây là một ví dụ:

            Comparisons of $x with PHP functions

Expression          gettype()   empty()     is_null()   isset() boolean : if($x)
$x = "";            string      TRUE        FALSE       TRUE    FALSE
$x = null;          NULL        TRUE        TRUE        FALSE   FALSE
var $x;             NULL        TRUE        TRUE        FALSE   FALSE
$x is undefined     NULL        TRUE        TRUE        FALSE   FALSE
$x = array();       array       TRUE        FALSE       TRUE    FALSE
$x = false;         boolean     TRUE        FALSE       TRUE    FALSE
$x = true;          boolean     FALSE       FALSE       TRUE    TRUE
$x = 1;             integer     FALSE       FALSE       TRUE    TRUE
$x = 42;            integer     FALSE       FALSE       TRUE    TRUE
$x = 0;             integer     TRUE        FALSE       TRUE    FALSE
$x = -1;            integer     FALSE       FALSE       TRUE    TRUE
$x = "1";           string      FALSE       FALSE       TRUE    TRUE
$x = "0";           string      TRUE        FALSE       TRUE    FALSE
$x = "-1";          string      FALSE       FALSE       TRUE    TRUE
$x = "php";         string      FALSE       FALSE       TRUE    TRUE
$x = "true";        string      FALSE       FALSE       TRUE    TRUE
$x = "false";       string      FALSE       FALSE       TRUE    TRUE

Vui lòng xem phần này để tham khảo thêm về các so sánh kiểu trong PHP. Nó sẽ cung cấp cho bạn một sự hiểu biết rõ ràng.

26 hữu ích 0 bình luận chia sẻ

answer

5

Hướng dẫn dùng null 0 trong PHP

Trong PHP, bạn có thể sử dụng các toán tử === và! == để kiểm tra không chỉ các giá trị có bằng nhau hay không mà còn xem các kiểu của chúng có khớp nhau hay không. Vì vậy, ví dụ: 0 == falsetrue, nhưng 0 === falsefalse. Tương tự đối !=với so với !==. Ngoài ra trong trường hợp bạn so sánh nullvới hai cái kia bằng cách sử dụng các toán tử đã đề cập, hãy mong đợi kết quả tương tự.

Bây giờ trong PHP, chất lượng giá trị này thường được sử dụng khi trả về một giá trị mà đôi khi có thể là 0(không), nhưng đôi khi có thể là hàm không thành công. Trong những trường hợp như vậy trong PHP, bạn quay lại falsevà bạn phải kiểm tra những trường hợp này bằng cách sử dụng toán tử nhận dạng ===. Ví dụ: nếu bạn đang tìm kiếm vị trí của một chuỗi bên trong chuỗi kia và bạn đang sử dụng strpos(), hàm này sẽ trả về vị trí số có thể là 0 nếu chuỗi được tìm thấy ngay từ đầu, nhưng nếu chuỗi không được tìm thấy tại tất cả, sau đó strpos()sẽ trở lại falsevà bạn phải tính đến điều này khi xử lý kết quả.

Nếu bạn sẽ sử dụng kỹ thuật tương tự trong các hàm của mình, bất kỳ ai quen thuộc với thư viện PHP chuẩn sẽ hiểu điều gì đang xảy ra và cách kiểm tra xem giá trị trả về có phải là điều mong muốn hay có một số lỗi xảy ra trong quá trình xử lý hay không. Thực tế cũng vậy đối với các tham số hàm, bạn có thể xử lý chúng theo cách khác nhau tùy thuộc vào việc chúng là mảng hay chuỗi hay không, và kỹ thuật này cũng được sử dụng rất nhiều trong PHP, vì vậy mọi người sẽ dễ dàng hiểu được. Vì vậy, tôi đoán đó là sức mạnh.

5 hữu ích 0 bình luận chia sẻ

answer

5

Hướng dẫn dùng null 0 trong PHP

Sai, Không có, Không có gì, 0, Không xác định , v.v., v.v.

Mỗi điều này có ý nghĩa cụ thể tương quan với các khái niệm thực tế. Đôi khi, nhiều nghĩa được nạp chồng vào một từ khóa hoặc giá trị duy nhất.

Trong CC ++ , NULL, False0đang quá tải để cùng giá trị. Trong C #, chúng có 3 khái niệm riêng biệt.

nullhoặc NULLthường chỉ ra sự thiếu giá trị, nhưng thường không nêu rõ lý do. 0cho biết số tự nhiên không và có kiểu tương đương với 1, 2, 3, v.v. và trong các ngôn ngữ hỗ trợ các khái niệm riêng biệt về NULLchỉ nên được coi là một số.

Sai chỉ ra không phải sự thật. Và nó được sử dụng trong các giá trị nhị phân . Nó không có nghĩa là không được đặt, cũng không có nghĩa là 0. Nó chỉ đơn giản chỉ ra một trong hai giá trị nhị phân.

Không có gì có thể chỉ ra rằng giá trị được đặt cụ thể là không có gì chỉ ra điều tương tự như null, nhưng có ý định.

Không xác định trong một số ngôn ngữ cho biết rằng giá trị vẫn chưa được đặt vì không có mã nào chỉ định giá trị thực.

5 hữu ích 1 bình luận chia sẻ

answer

4

Hướng dẫn dùng null 0 trong PHP

Tôi vừa lãng phí 1/2 một ngày cố gắng để có được hoặc là một 0, null, falsetrở về từ strops!

Đây là tất cả những gì tôi đang cố gắng làm, trước khi tôi phát hiện ra rằng logic không đi đúng hướng, dường như có một lỗ hổng trong mã hóa php:

Khái niệm lấy một tên miền được lưu trữ trên một máy chủ và đảm bảo rằng nó không phải là cấp root, OK một số cách khác nhau để thực hiện việc này, nhưng tôi đã chọn khác do các hàm / cấu trúc php khác mà tôi đã thực hiện.

Dù sao đây cũng là cơ sở của việc luyện tập:

if (strpos($_SERVER ['SERVER_NAME'], dirBaseNAME ()) 
{ 
    do this 
} else {
    or that
}

{
echo strpos(mydomain.co.uk, mydomain);  

if ( strpos(mydomain, xmas) == null ) 
    {
        echo "\n1 is null"; 
    }

if ( (strpos(mydomain.co.uk, mydomain)) == 0 ) 
    {
        echo "\n2 is 0"; 
    } else {
        echo "\n2 Something is WRONG"; 
    }

if ( (mydomain.co.uk, mydomain)) != 0 ) 
    {
        echo "\n3 is 0"; 
    } else {
        echo "\n3 it is not 0"; 
    }

if ( (mydomain.co.uk, mydomain)) == null ) 
    {
        echo "\n4 is null"; 
    } else {
        echo "\n4 Something is WRONG"; 
    }
}

CUỐI CÙNG sau khi đọc Chủ đề này, tôi thấy rằng điều này đã hiệu quả !!!

{
if ((mydomain.co.uk, mydomain)) !== false ) 
    {
        echo "\n5 is True"; 
    } else {
        echo "\n5 is False"; 
    }
}

Cảm ơn vì bài viết này, bây giờ tôi hiểu rằng mặc dù đó là Giáng sinh, nó có thể không phải là Giáng sinh false, vì nó cũng có thể là một NULLngày!

Sau khi lãng phí một ngày để gỡ lỗi một số mã đơn giản, ước gì tôi đã biết điều này trước đây, vì tôi sẽ có thể xác định được vấn đề, thay vì đi khắp nơi để cố gắng làm cho nó hoạt động. Nó không hoạt động, như False, NULL0không phải tất cả đều giống như True or False or NULL?

4 hữu ích 0 bình luận chia sẻ

answer

2

Hướng dẫn dùng null 0 trong PHP

Từ tài liệu trực tuyến PHP :

Để chuyển đổi rõ ràng một giá trị thành boolean, hãy sử dụng phôi (bool) hoặc (boolean).
Tuy nhiên, trong hầu hết các trường hợp, việc ép kiểu là không cần thiết, vì một giá trị sẽ được tự động chuyển đổi nếu một toán tử, hàm hoặc cấu trúc điều khiển yêu cầu đối số boolean.
Khi chuyển đổi thành boolean, các giá trị sau được coi là FALSE:

  • FALSEchính boolean
  • số nguyên `` 0 (không)
  • phao 0.0(không)
  • chuỗi rỗng và chuỗi "0"
  • một mảng không có phần tử
  • một đối tượng không có biến thành viên (chỉ PHP 4)
  • kiểu đặc biệt NULL(bao gồm các biến chưa đặt)
  • Các đối tượng SimpleXML được tạo từ các thẻ trống
    Mọi giá trị khác đều được xem xét TRUE(bao gồm bất kỳ tài nguyên nào).

Vì vậy, trong hầu hết các trường hợp, nó đều giống nhau.

Mặt khác, cái ===và cái ==không giống nhau. Thông thường, bạn chỉ cần toán tử "bằng". Làm rõ:

$a == $b    //Equal. TRUE if $a is equal to $b.
$a === $b   //Identical. TRUE if $a is equal to $b, and they are of the same type. 

Để biết thêm thông tin, hãy kiểm tra trang " Toán tử so sánh " trong tài liệu trực tuyến PHP.

Hi vọng điêu nay co ich.

2 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn dùng null 0 trong PHP

Sự khác biệt giữa các giá trị này luôn phụ thuộc vào các quy tắc chi tiết về ngôn ngữ cụ thể. Những gì bạn học được đối với PHP không nhất thiết phải đúng với Python, Perl hoặc C, v.v. Mặc dù việc học các quy tắc cho (các) ngôn ngữ bạn đang làm việc là rất có giá trị, nhưng dựa vào chúng quá nhiều sẽ gây ra rắc rối . Rắc rối xảy ra khi lập trình viên tiếp theo cần duy trì mã của bạn và bạn đã sử dụng một số cấu trúc tận dụng một số chi tiết nhỏ của Null so với False (ví dụ). Mã của bạn phải trông đúng (và ngược lại, mã sai sẽ trông sai ).

1 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn dùng null 0 trong PHP

Null được sử dụng trong cơ sở dữ liệu để biểu thị "không có bản ghi" hoặc "không có thông tin". Vì vậy, bạn có thể có một trường bit mô tả "người dùng này có muốn được chúng tôi gửi e-mail không", trong đó True có nghĩa là họ làm, False có nghĩa là họ không muốn được gửi bất kỳ thứ gì, nhưng Null có nghĩa là bạn không t biết. Họ có thể xuất hiện thông qua các liên kết bên ngoài và tương tự như vậy.

Hàm ý logic của Null thường khác nhau - trong một số ngôn ngữ, NULL không bằng bất kỳ thứ gì, vì vậy if (a == NULL) sẽ luôn là false.

Vì vậy, cá nhân tôi luôn khởi tạo boolean thành FALSE, và việc khởi tạo một boolean thành NULL sẽ trông hơi khó hiểu (ngay cả trong C, nơi cả hai đều chỉ là 0 ... chỉ là một thứ kiểu dáng).

1 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn dùng null 0 trong PHP

Tôi nghĩ rằng các nhà phát triển tồi tìm thấy tất cả các cách sử dụng khác nhau của null / 0 / false trong mã đó.

Ví dụ, một trong những sai lầm phổ biến nhất mà các nhà phát triển mắc phải là trả về mã lỗi dưới dạng dữ liệu với một hàm.

// On error GetChar returns -1
int GetChar()

Đây là một ví dụ về giao diện đường. Điều này được giải thích trong cuốn sách "Gỡ lỗi quy trình phát triển phần mềm" và cũng trong một cuốn sách khác "viết mã chính xác".

Vấn đề với điều này, là hàm ý hoặc các giả định được thực hiện trên kiểu char. Trên một số trình biên dịch, kiểu ký tự có thể không được ký. Vì vậy, mặc dù bạn trả về -1, trình biên dịch có thể trả về 1 thay thế. Khó có thể phát hiện ra những giả định về trình biên dịch này trong C ++ hoặc C.

Thay vào đó, cách tốt nhất là không trộn mã lỗi với dữ liệu của bạn. Vì vậy, các chức năng sau đây.

char GetChar()

bây giờ trở thành

// On success return 1
// on failure return 0
bool GetChar(int &char)

Điều này có nghĩa là bất kể nhà phát triển trẻ tuổi đến đâu trong cửa hàng phát triển của bạn, họ sẽ không bao giờ làm sai điều này. Mặc dù điều này không nói về thừa kế hoặc phụ thuộc vào mã.

Vì vậy, nói chung, việc hoán đổi bool làm loại ngôn ngữ đầu tiên là ổn và tôi nghĩ joel đã nói về nó với bài đăng gần đây của anh ấy. Nhưng cố gắng không sử dụng các bools trộn và kết hợp với dữ liệu của bạn trong quy trình của bạn và bạn sẽ hoàn toàn ổn.

1 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn dùng null 0 trong PHP

Trong PHP, nó phụ thuộc vào việc bạn có đang xác thực các kiểu:

( 
 ( false !== 0 ) && ( false !== -1 ) && ( false == 0 ) && ( false == -1 ) &&
 ( false !== null ) && ( false == null ) 
)

Về mặt kỹ thuật là null 0x00nhưng trong PHP ( null == 0x00 ) && ( null !== 0x00 ).

0 là một giá trị nguyên.

1 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn dùng null 0 trong PHP

Một sự thật thú vị về NULLPHP: Nếu bạn đặt một var bằng NULL, nó giống như khi bạn đã gọi unset()nó.

NULLvề cơ bản có nghĩa là một biến không có giá trị nào được gán cho nó; falselà một giá trị Boolean hợp lệ, 0là một giá trị số nguyên hợp lệ, và PHP có một số chuyển đổi khá xấu xí giữa 0, "0", "", và false.

1 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng null 0 trong PHP

Null không là gì, False là một bit, và 0 là (có thể là) 32 bit.

Không phải là một chuyên gia PHP, nhưng trong một số ngôn ngữ hiện đại hơn, chúng không thể hoán đổi cho nhau. Tôi hơi nhớ việc 0 và false có thể hoán đổi cho nhau, nhưng với boolean là một kiểu thực tế, bạn có thể có các phương thức và đối tượng liên kết với nó nên đó chỉ là sự cân bằng. Null là null mặc dù, sự vắng mặt của bất cứ điều gì về cơ bản.

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng null 0 trong PHP

Chà, tôi không thể nhớ đủ từ những ngày PHP của mình để trả lời phần "===", nhưng đối với hầu hết các ngôn ngữ kiểu C, NULL nên được sử dụng trong ngữ cảnh của các giá trị con trỏ, false dưới dạng boolean và 0 là một giá trị số chẳng hạn như int. '\ 0' là giá trị tùy chỉnh cho ngữ cảnh ký tự. Tôi cũng thường thích sử dụng 0.0 cho phao và đôi.

Vì vậy .. câu trả lời nhanh là: ngữ cảnh.

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng null 0 trong PHP

Trong hầu hết các ngôn ngữ hiện đại, null về mặt logic đề cập đến các con trỏ (hoặc tham chiếu) không có giá trị hoặc một biến không được khởi tạo. 0 là giá trị nguyên của 0 và false là giá trị boolean của, tốt, false. Để làm cho mọi thứ trở nên phức tạp, trong C, ví dụ, null, 0 và false đều được biểu diễn theo cùng một cách chính xác. Tôi không biết nó hoạt động như thế nào trong PHP.

Sau đó, để làm phức tạp hơn mọi thứ, cơ sở dữ liệu có khái niệm null, có nghĩa là thiếu hoặc không áp dụng được và hầu hết các ngôn ngữ không có cách trực tiếp để ánh xạ DBNull sang null. Cho đến gần đây, ví dụ, không có sự phân biệt giữa int là null và là 0, nhưng điều đó đã được thay đổi với int nullable.

Xin lỗi để làm cho âm thanh này phức tạp. Chỉ là đây đã là một điểm mấu chốt trong các ngôn ngữ trong nhiều năm và cho đến gần đây, nó vẫn chưa có bất kỳ giải pháp rõ ràng nào ở bất kỳ đâu. Mọi người thường chỉ kết hợp mọi thứ lại với nhau hoặc để trống hoặc 0 đại diện cho giá trị rỗng trong cơ sở dữ liệu, điều này không phải lúc nào cũng hoạt động tốt.

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng null 0 trong PHP

Sai và 0 giống nhau về mặt khái niệm, tức là chúng là đẳng cấu. 0 là giá trị ban đầu cho đại số các số tự nhiên và False là giá trị ban đầu cho đại số Boolean.

Nói cách khác, 0 có thể được định nghĩa là số, khi được thêm vào một số tự nhiên nào đó, sẽ sinh ra cùng một số:

x + 0 = x

Tương tự, False là một giá trị sao cho sự tách biệt của nó và bất kỳ giá trị nào khác là cùng một giá trị:

x || False = x

Null về mặt khái niệm là một cái gì đó hoàn toàn khác. Tùy thuộc vào ngôn ngữ, có các ngữ nghĩa khác nhau cho nó, nhưng không có ngữ nghĩa nào trong số đó mô tả "giá trị ban đầu" là False và 0 là như vậy. Không có đại số cho Null. Nó liên quan đến các biến, thường để biểu thị rằng biến không có giá trị cụ thể trong ngữ cảnh hiện tại. Trong hầu hết các ngôn ngữ, không có phép toán nào được định nghĩa trên Null và việc sử dụng Null làm toán hạng là một lỗi. Trong một số ngôn ngữ, có một giá trị đặc biệt được gọi là "bottom" chứ không phải "null", là một trình giữ chỗ cho giá trị của một phép tính không kết thúc.

Tôi đã viết nhiều hơn về ý nghĩa của NULL ở những nơi khác.

0 hữu ích 1 bình luận chia sẻ

answer

0

Hướng dẫn dùng null 0 trong PHP

Ai đó có thể giải thích cho tôi tại sao 'NULL' không chỉ là một chuỗi trong một trường hợp so sánh?

$x = 0;
var_dump($x == 'NULL');  # TRUE   !!!WTF!!!

0 hữu ích 1 bình luận chia sẻ

answer

-1

Hướng dẫn dùng null 0 trong PHP

Các vấn đề với sự giả dối bắt nguồn từ lịch sử PHP. Vấn đề nhắm mục tiêu vào kiểu vô hướng không được xác định rõ.

'*' == true -> true (string match)
'*' === true -> false (numberic match)

(int)'*' == true -> false
(string)'*' == true -> true

Tính nghiêm ngặt của PHP7 là một bước tiến, nhưng có lẽ là chưa đủ. https://web-techno.net/typing-with-php-7-what-you-shouldnt-do/

-1 hữu ích 0 bình luận chia sẻ