Php sarmalama (encapsulation)

php-oop Şu yazımda php sınıf yapılarına bir giriş yapmış ve sarmalamadan (encapsulation) bahsetmiştim.

Bir nesnenin özelliklerine sınıf dışından erişmek pek doğru olmayan bir yaklaşımdır. Araba sınıfımızın tekerlik adında bir özelliği olduğunu düşünelim. Bir arabanın en fazla 4 tekerliği olmak zorundadır. Eğer bu özelliğe 5 değeri atanırsa bunu nasıl kontrol edebiliriz? Nesne özelliklerine yani sınıf içinde tanımlanmış değişkenlere direk erişim, çalışma anında oluşan hatalara veya sınıfımızın isteneni yapmaması gibi durumlara sebep olur. Bunu engellemek için sarmalama (encapsulation) kavramı geliştirilmiştir. Oluşturulan özelliğe sadece sınıf içinden erişilir ve bu özelliğe değer atayan bir “setter” ve bu değeri döndüren “getter” metodu yazılır. Bu şekilde çalışma anında oluşabilecek hatalar da engellenmiş olur.

Önceki yazımda örnek verdiğim araba sınıfı üzerinden bir örnek yapalım.

<?php
class Araba {

 // sınıf özelliğini tanımlıyoruz
 private $tekerlik;
 
 // $tekerlik özelliği için getter metodu
 public function getTekerlik() {
 return $this->tekerlik;
 }
 
 // $tekerlik özelliği için setter metodu
 public function setTekerlik($tekerlik) {
 $this->tekerlik = $tekerlik;
 }

}

$araba = new Araba(); // nesnemizi oluşturuyoruz
$araba->setTekerlik(3); // $tekerlik özelliğine değer atıyoruz
echo $araba->getTekerlik(); // $tekerlik özelliğini getiren metodumuzu çağırıyoruz


?>

Sarmalamaya en basit örnek budur. Gördüğünüz gibi sınıf özelliğimizi private erişim belirteciyle tanımladık. Bu şekilde özelliğimize sınıfımızın dışından erişimi engellemiş olduk. Özelliğimizi getiren ve değer atayan iki adet metot oluşturduk. Bu metotlar sayesinde özelliğimize değer atayabilir ve değerine ulaşabiliriz.

Sınıfımıza bir de yapılandırıcı metot (constructer) ekleyelim ve setTekerlik metodumuzda atanan değeri kontrol edelim.

<?php
class Araba {

 // sınıf özellikğini tanımlıyoruz
 private $tekerlik;
 
 // yapılandırıcı metodu oluşturuyoruz
 function __construct($tekerlik) {
 $this->setTekerlik($tekerlik); // tekerlik özelliği için setter metodunu çağırıyoruz
 }
 
 // $tekerlik özelliği için getter metodu
 public function getTekerlik() {
 return $this->tekerlik;
 }
 
 // $tekerlik özelliği için setter metodu
 public function setTekerlik($tekerlik) {
 if($tekerlik > 4) {
 $this->tekerlik = 4;
 } else {
 $this->tekerlik = $tekerlik;
 }
 }

}

$araba = new Araba(5); // nesnemizi oluşturuyoruz
echo $araba->getTekerlik(); // sonuç: 4
?>

Yapılandırıcı metodumuzda setTekerlik metodunu çağırıyoruz. setTekerlik metodunda da özelliğimize atanan değeri kontrol ediyoruz. Eğer dörtten büyük bir değer girilirse dört, daha düşük bir değer girilirse özelliğimize bu değeri atıyoruz. getTekerlik metodunda da özelliğimizi döndürüyoruz.

Sarmalama (encapsulation) bundan ibarettir.

Henüz Yorum Yapan Olmadı

Yorum Yapın