PHP 8.0: Null-safe operator

Php Tip 💡 : Null-safe operator 🎉

Trong PHP 8, chúng ta có thể sử dụng cách viết nullsafe (?->). Thật tuyệt vời khi ta kiểm tra các đối tượng , function,...

Ví dụ : Cách viết sao giúp ta kiểm tra đối tượng address, có tồn tại không, nếu có nó sẽ trỏ tới function getContry() để lấy giá trị

$regularTotal = $user->getCart()?->addItem("Áo")?->addItem("Quần")?->getTotal();

Ví dụ :

<?php 

class User {
    public function __construct(public string $name) {}

    public function getCart(): ?Cart {
        // Giả sử đôi khi người dùng có thể không có giỏ hàng
        return rand(0, 1) ? new Cart() : null;
    }
}

class Cart {
    private array $items = [];

    public function addItem(string $item): self {
        $this->items[] = $item;
        return $this;
    }

    public function getItems(): array {
        return $this->items;
    }

    public function getTotal(): float {
        // Giả sử mỗi mặt hàng có giá 10
        return count($this->items) * 10;
    }
}

class PremiumCart extends Cart {
    public function applyDiscount(): float {
        $total = $this->getTotal();
        return $total * 0.9; // 10% discount
    }
}

function simulateUserAction(User $user) {
    // Sử dụng nullsafe operator để xử lý các trường hợp khác nhau
    $regularTotal = $user->getCart()?->addItem("Áo")?->addItem("Quần")?->getTotal();
    
    echo "Giỏ hàng của {$user->name}:\n";
    echo "Tổng tiền (giỏ hàng thường): " . ($regularTotal ?? "Không có giỏ hàng") . "\n";

    // Giả sử PremiumCart được sử dụng cho người dùng premium
    $premiumCart = new PremiumCart();
    $premiumTotal = $premiumCart?->addItem("Áo")?->addItem("Quần")?->applyDiscount();
    
    echo "Tổng tiền (giỏ hàng premium với giảm giá): $premiumTotal\n";

    // Hiển thị các mặt hàng (nếu có)
    $items = $user->getCart()?->getItems();
    if ($items) {
        echo "Các mặt hàng: " . implode(", ", $items) . "\n";
    } else {
        echo "Không có mặt hàng trong giỏ hàng.\n";
    }
}

// Sử dụng
$user = new User("Hoà Nguyễn Coder");
simulateUserAction($user);

 

Bài Viết Liên Quan

Messsage

Nếu bạn thích chia sẻ của tôi, đừng quên nhấn nút !ĐĂNG KÝ