Gán nếu không null php

Nếu bạn đã sử dụng trong quá khứ, có lẽ bạn cũng nhận thấy những thiếu sót của nó. hợp nhất null không hoạt động trên các cuộc gọi phương thức. Thay vào đó, bạn cần kiểm tra trung gian hoặc dựa vào người trợ giúp

$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
3 được cung cấp bởi một số khung

$startDate = $booking->getStartDate();

$dateAsString = $startDate ? $startDate->asDateTimeString() : null;

Toán tử nullsafe cung cấp chức năng tương tự như hợp nhất null, nhưng cũng hỗ trợ các lệnh gọi phương thức. Thay vì viết cái này

$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}

PHP 8 cho phép bạn viết cái này

$country = $session?->user?->getAddress()?->country;

Chúng ta hãy xem toán tử mới này có thể và không thể làm gì

Toán tử Nullsafe chuyên sâu

Hãy bắt đầu bằng cách giải quyết câu hỏi quan trọng nhất. chính xác thì sự khác biệt giữa toán tử hợp nhất null và toán tử nullsafe là gì?

Hãy xem ví dụ này

class Order
{
    public ?Invoice $invoice = null;
}

$order = new Order();

Ở đây chúng ta có đối tượng

$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
4 có quan hệ tùy chọn với đối tượng
$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
5. Bây giờ, hãy tưởng tượng chúng tôi muốn lấy số của hóa đơn (nếu hóa đơn không phải là null). Bạn có thể làm điều này với cả toán tử hợp nhất null và toán tử nullsafe

var_dump($order->invoice?->number);
var_dump($order->invoice->number ?? null);

Vậy sự khác biệt là gì? . Ví dụ: bạn có thể sử dụng toán tử hợp nhất null kết hợp với các khóa mảng, trong khi toán tử nullsafe không thể xử lý chúng

$array = [];

var_dump($array['key']->foo ?? null);
var_dump($array['key']?->foo);

Warning: Undefined array key "key"

Mặt khác, toán tử nullsafe có thể hoạt động với các lệnh gọi phương thức, trong khi toán tử hợp nhất null không thể. Hãy tưởng tượng một đối tượng

$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
5 như vậy

$startDate = $booking->getStartDate();

$dateAsString = $startDate ? $startDate->asDateTimeString() : null;
1

Bạn có thể sử dụng toán tử nullsafe để gọi

$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
7 vào ngày lập hóa đơn, ngay cả khi đó là ngày
$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
8

$startDate = $booking->getStartDate();

$dateAsString = $startDate ? $startDate->asDateTimeString() : null;
4

Trong khi toán tử hợp nhất null sẽ sụp đổ

$startDate = $booking->getStartDate();

$dateAsString = $startDate ? $startDate->asDateTimeString() : null;
5

Xem video mới nhất của tôi

Gán nếu không null php

PHP trong 1 phút

ngắn mạch

Đôi khi, bạn có thể sử dụng toán tử kết hợp null hoặc nullsafe và những lúc khác, bạn cần sử dụng một toán tử cụ thể. Sự khác biệt là toán tử nullsafe sử dụng một dạng "đoản mạch". viết

$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
9 sẽ khiến PHP xem xét những gì ở phía bên trái của toán tử này, nếu đó là
$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
8 thì phía bên tay phải sẽ bị loại bỏ. Toán tử kết hợp null thực sự là một lệnh gọi
$country = $session?->user?->getAddress()?->country;
1 ngụy trang trên toán hạng bên trái của nó, không hỗ trợ đoản mạch

Đoản mạch cũng có nghĩa là khi viết một cái gì đó như thế này

$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
0

$country = $session?->user?->getAddress()?->country;
2 sẽ chỉ được thực hiện nếu
$country = $session?->user?->getAddress()?->country;
3 thực sự không phải là
$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
8

Toán tử nullsafe lồng nhau

Có thể lồng một số lệnh gọi toán tử nullsafe như vậy

$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
1

Chỉ để đọc dữ liệu

Bạn không thể sử dụng toán tử nullsafe để ghi dữ liệu vào đối tượng

$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
2

Nhận thấy một tpyo? . Nếu bạn muốn cập nhật những gì đang diễn ra trên blog này, bạn có thể theo dõi tôi trên Twitter hoặc đăng ký nhận bản tin của tôi. Đăng ký email

Toán tử nullsafe chắc chắn là mảnh ghép còn thiếu cuối cùng đã được thêm vào trong PHP. Với bản chất năng động của nó, thật tốt khi có một cách giải quyết suôn sẻ với

$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
8. Sự khác biệt và trùng lặp giữa toán tử nullsafe và toán tử kết hợp null lúc đầu cảm thấy hơi khó hiểu, nhưng tôi chắc rằng chúng ta sẽ quen với nó

IS NOT NULL trong if điều kiện PHP?

Hàm is_null() kiểm tra xem một biến có phải là NULL hay không . Hàm này trả về true (1) nếu biến là NULL, ngược lại trả về false/nothing.

Làm cách nào để gán giá trị NULL trong PHP?

Trong PHP, một biến không có giá trị được gọi là kiểu dữ liệu null. Một biến như vậy có một giá trị được xác định là NULL. Một biến có thể được gán rõ ràng NULL hoặc giá trị của nó được đặt thành null bằng cách sử dụng hàm unset() .

Nếu (. Ý nghĩa trống rỗng trong PHP?

Hàm PHP empty() . Các giá trị sau ước tính trống. 0. 0. 0. returns false if the variable exists and is not empty, otherwise it returns true. The following values evaluates to empty: 0. 0.0.

NULL có phân biệt chữ hoa chữ thường trong PHP không?

Null không phân biệt chữ hoa chữ thường . Từ tài liệu. Chỉ có một giá trị kiểu null và đó là từ khóa không phân biệt chữ hoa chữ thường NULL.