PHP'de OOP'de Salt Okunur Özellikler
Tüm özellikleri private olan bir sınıfı ele alalım:
<?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:
<?php
class Test
{
private $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $this->$property;
}
}
?>
Özellikleri okumak için onu kullanalım:
<?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
$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
$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.
User adında, özellikleri sadece getter'lar kullanılarak
salt okunur olan bir sınıf verilsin:
<?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.