Toán tử trích xuất an toàn trong chuỗi lệnh gọi trong Lập trình Hướng đối tượng PHP

Toán tử trích xuất an toàn ?-> có thể được áp dụng trong chuỗi lệnh gọi. Chúng ta hãy xem xét ví dụ. Giả sử chúng ta có các lớp sau:

php<?php
  class User {
    public $city = null;
  }
  
  class City {
    public function getName() {
      return 'tên thành phố';
    }
  }
?>

Giả sử chúng ta muốn lấy thành phố của người dùng thông qua chuỗi:

php<?php
  $user = new User();
  $user->city = new City();
  
  echo $user->city->getName();
?>

Trong trường hợp, nếu thành phố bằng null, thì việc gọi chuỗi như vậy sẽ dẫn đến lỗi:

php<?php
  $user = new User();
  $user->city = null;
  
  echo $user->city->getName(); // lỗi
?>

Để ngăn chặn lỗi, chúng ta có thể sử dụng toán tử trích xuất an toàn:

php<?php
  $user = new User();
  $user->city = null;
  
  echo $user->city?->getName();
?>

Giả sử bây giờ cả người dùng cũng có thể là null. Trong trường hợp này, chúng ta có thể sử dụng toán tử trích xuất an toàn hai lần:

php<?php
  $user = null;
  
  echo $user?->city?->getName();
?>
Задание 1

Cải thiện mã sau bằng cách sử dụng toán tử trích xuất an toàn:

php<?php
  class Employee {
    public $name;
    public $position;
    
    public function __construct($name, $position)
    {
      $this->name = $name;
      $this->position = $position;
    }
  }
  
  class Position {
    private $name;
    
    public function __construct($name)
    {
      $this->name = $name;
    }
    
    public function getName() {
      return $this->name;
    }
  }
  
  $position = new Position('developer');
  $employee = new Employee('john', $position);
  
  echo $employee->position->getName();
?>