Tên thuộc tính từ đối tượng khác trong OOP PHP

Tên thuộc tính thậm chí có thể là một thuộc tính của một đối tượng khác. Giả sử chúng ta có lớp User sau:

php<?php
  class User
  {
    public $name;
    public $surn;
    
    public function __construct($name, $surn)
    {
      $this->name = $name;
      $this->surn = $surn;
    }
  }
?>

Hãy tạo một đối tượng của lớp này:

php<?php
  $user = new User('john', 'smit');
?>

Giả sử chúng ta cũng có lớp Prop, trong thuộc tính value sẽ chứa tên của thuộc tính:

php<?php
  class Prop
  {
    public $value;
    
    public function __construct($value)
    {
      $this->value = $value;
    }
  }
?>

Hãy tạo một đối tượng của lớp này:

php<?php
  $prop = new Prop('name'); 
?>

Bây giờ, sử dụng đối tượng này để in tên của user:

php<?php
  echo $user->{$prop->value}; // sẽ in ra 'john'
?>
Задание 1

Cho lớp sau:

php<?php
  class Employee
  {
    public $name;
    public $salary;
    public $position;
    
    public function __construct($name, $salary, $position)
    {
      $this->name = $name;
      $this->salary = $salary;
      $this->position = $position;
    }
  }
?>

Cũng cho lớp như sau:

php<?php
  class Data
  {
    public $prop1 = 'name';
    public $prop2 = 'salary';
    public $prop3 = 'position';
  }
?>

Hãy in các thuộc tính của đối tượng Employee thông qua đối tượng Data.