PHP'de OOP'de Sihir ile Özellik Yazma
Sihirli __set yöntemi,
mevcut olmayan veya gizli bir özelliğin değerini
değiştirmeye çalıştığınızda çağrılır.
Parametre olarak özelliğin adını ve
atanmaya çalışılan değeri alır.
Pratik bir örnek üzerinden inceleyelim.
Elimizde Test adında bir sınıf olduğunu varsayalım:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Bu sınıfın içinde, var_dump fonksiyonunu kullanarak
erişilmeye çalışılan özelliğin adını ve
bu özelliğe atanmaya çalışılan değeri
gösteren bir sihirli __set yöntemi oluşturalım:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Sınıfımızın çalışmasını test edelim:
<?php
$test = new Test;
$test->prop = 'value'; // __set yönteminin var_dump'ı 'prop value' çıktısını verecek
?>
Şimdi, adı $property değişkeninde saklanan
özelliğe değer atayalım:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // değeri ayarlıyoruz
}
}
?>
Artık özel (private) özelliklere sınıfın dışından değer yazabileceğiz:
<?php
$test = new Test;
$test->prop1 = 1; // 1 yazalım
$test->prop2 = 2; // 2 yazalım
?>
Yazma işlemini yapabiliriz, ancak oraya bir şey yazılıp yazılmadığını kontrol edemeyiz, çünkü özellikler özeldir.
Bu özellikler için bir getter yapılabilir veya
doğrudan sihirli __get yöntemi
kullanılabilir. İkinci seçeneği kullanalım:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Sihirli özellik getter'ı:
public function __get($property)
{
return $this->$property;
}
}
?>
İşte şimdi sınıfımızın çalışmasını kontrol edebiliriz. Test edelim:
<?php
$test = new Test;
$test->prop1 = 1; // 1 yazalım
$test->prop2 = 2; // 2 yazalım
echo $test->prop1; // 1 çıktısını verir
echo $test->prop2; // 2 çıktısını verir
?>
Aslında, elbette ki, özel özelliklere herkesin yazmasına izin vermemeliyiz, yoksa bu özel özelliklerin anlamı kalmaz (hepsini genel (public) yapmak daha kolay olurdu).
Bu nedenle, bu yöntem yalnızca gerçekten gerekli olduğu durumlarda kullanılmalıdır. Bir sonraki derslerde başarılı uygulama örneklerini daha fazla inceleyeceğiz.