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);