PHP'de OOP'de Salt Okunur Özellikler

Tüm özellikleri private olan bir sınıfı ele alalım:

Test.php<?php
  class Test
  {
    private $prop1 = 1;
    private $prop2 = 2;
  }
?>

Şimdi, bu özelliklerin dış dünyada sadece okunabilir olmasını sağlayalım. Daha önce her özellik için getter'lar oluşturarak ve setter'lar oluşturmayarak bunu yapmıştık.

Şimdi bu görevi çözmek için sihirli __get yöntemini kullanalım. İstenen özelliğin değerini içinde döndüreceğiz. Nasıl yapılır: İstenen özelliğin adı __get yönteminin parametresine, bizim durumumuzda $property değişkenine gelir.

Bu, adı bir değişkende saklanan özelliği şu şekilde okuyabileceğimiz anlamına gelir: $this->$property (özelliğin adı bir değişken olacak, yani başında dolar işareti olacak, bunu önceki derslerde görmüştük).

Açıklanan __get yöntemini yapalım:

Test.php<?php
  class Test
  {
    private $prop1 = 1;
    private $prop2 = 2;
    
    public function __get($property)
    {
      return $this->$property;
    }
  }
?>

Özellikleri okumak için onu kullanalım:

index.php<?php
  $test = new Test;
  
  echo $test->prop1; // 1 yazdırır
  echo $test->prop2; // 2 yazdırır
?>

Bir özelliğe bir şey yazma girişimi hataya yol açacaktır:

php<?php
  $test = new Test;
  $test->prop1 = 2; // hata verecek
?>

Bu tam olarak ihtiyacımız olan şey: bir özellik okunabilir ama yazılamaz.

Var olmayan bir özelliği okuma girişimi hata verecektir:

php<?php
  $test = new Test;
  echo $test->prop3; // hata verecek
?>

Ayrıca şu nüansa dikkat edin: Özellikleri salt okunur yapmanın eski yolunu yaptığımızda, özelliği okumak için bir getter yöntemi kullanıyorduk.

Yeni yöntemde, sanki public'lermiş gibi tam olarak özelliklere erişeceğiz. Ama onlara sanki private'larmış gibi yazamayacağız.

Задание 1

User adında, özellikleri sadece getter'lar kullanılarak salt okunur olan bir sınıf verilsin:

php<?php
  class User
  {
    private $name;
    private $age;
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age = $age;
    }
    
    public function getName()
    {
      return $this->name;
    }
    
    public function getAge()
    {
      return $this->age;
    }
  }
?>

Bu sınıfın kodunu, getter'lar yerine sihirli __get yönteminin kullanılacak şekilde değiştirin.