raderde 1
raderde
Cannn6161 1
Cannn6161
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Mt2Hizmet 1
Mt2Hizmet
melankolıa18 1
melankolıa18
romegames 1
romegames
Krutzo 1
Krutzo
shrpnl 1
shrpnl
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

PHP - Kapsülleme

Carissa

Administrator
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye Turkmmo Discord Nitro Booster
Admin
VIP Üye
Katılım
2 Mar 2015
Konular
59,189
Mesajlar
88,441
Çözüm
109
Online süresi
4mo 16d
Reaksiyon Skoru
14,280
Altın Konu
2,398
TM Yaşı
11 Yıl 3 Ay 7 Gün
Başarım Puanı
1,051
MmoLira
695,092
DevLira
234
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

PHP, OOP'nin önemli prensiplerinden biri olan kapsüllemeyi erişim kontrol anahtar kelimeleri olan public, private ve protected ile uygular.

Kapsülleme, bir nesnenin veri üyelerini veya özelliklerini sınıfın dışındaki ortamın erişiminden uzak tutma mekanizmasını ifade eder ve yalnızca sınıfta bulunan yöntemler veya işlevler aracılığıyla kontrollü erişime izin verir.

Aşağıdaki diyagram nesne yönelimli programlama metodolojisinde kapsülleme ilkesini göstermektedir.

php_encapsulation_1 (1).jpg

PHP'nin anahtar sözcükler listesi, PHP'deki bir sınıfın örneği olan bir nesnenin özelliklerine ve yöntemlerine erişilebilirliği belirleyen aşağıdaki anahtar sözcükleri içerir:

  • Genel − Sınıf üyelerine her yerden, hatta sınıfın kapsamının dışından bile erişilebilir, ancak yalnızca nesne referansıyla.
  • Özel − Sınıf üyelerine sınıfın içinden erişilebilir. Sınıf örneğinin referansıyla bile üyelerin sınıf dışından erişmesini engeller.
  • Korunmuş − Üyelere yalnızca sınıf ve onun alt sınıfı içinden erişilebilir, başka hiçbir yerde erişilemez.
Bu üç anahtar kelime " genel, özel ve korumalı " genellikle erişim değiştiricileri olarak adlandırılır. Ayrıca, belirli bir sınıf üyesinin ne ölçüde erişilebilir olduğuna karar verdikleri için görünürlük modları olarak da adlandırılırlar.

Kamu Üyeleri

PHP'de sınıf üyeleri (hem üye değişkenler hem de üye fonksiyonlar) varsayılan olarak herkese açıktır.

Örnek

Aşağıdaki programda, nesnenin üye değişkenleri title ve price, aksi belirtilmediği takdirde varsayılan olarak herkese açık oldukları için sınıfın dışında da serbestçe erişilebilir.

PHP:
<?php
   class Person {
  
      /* Member variables */
      var $name;
      var $age;

      /*Constructor*/
      function __construct(string $param1="Ravi", int $param2=28) {
         $this->name = $param1;
         $this->age = $param2;
      }

      function getName() {
         echo "Name: $this->name" . PHP_EOL;;
      }
      function getAge() {
         echo "Age: $this->age" . PHP_EOL;;
      }
   }
   $b1 = new Person();
   $b1->getName();
   $b1->getAge();
   echo "Name : $b1->name Age: $b1->age" . PHP_EOL;
?>

Aşağıdaki çıktıyı üretecektir :

Name: Ravi
Age: 28
Name : Ravi Age: 28

Tüm sınıf üyelerinin özelliklerinin varsayılan olarak herkese açık olduğunu unutmayın , isterseniz bunları açıkça herkese açık olarak bildirebilirsiniz. Sonuç olarak, getName() ve getAge() örnek yöntemleri sınıfın dışından çağrılabilir.

name ve age özellikleri de herkese açık olduğundan, bunlara sınıfın dışından da erişilebilir; bu da kapsülleme ilkesi gereği istenmeyen bir durumdur.


Özel Üyeler

Yukarıda belirtildiği gibi, kapsülleme ilkesi üye değişkenlerinin doğrudan erişilebilir olmamasını gerektirir. Veri üyelerine yalnızca yöntemler erişebilmelidir. Bu nedenle, üye değişkenlerini gizli, yöntemleri ise herkese açık hale getirmemiz gerekir.

Örnek

İsim ve yaş özelliklerinin bildirimini private olarak değiştirelim ve aşağıdaki PHP betiğini çalıştıralım.

PHP:
<?php
   class Person {
  
      /* Member variables */
      private $name;
      private $age;

      /*Constructor*/
      function __construct(string $param1="Ravi", int $param2=28) {
         $this->name = $param1;
         $this->age = $param2;
      }

      public function getName() {
         echo "Name: $this->name" . PHP_EOL;;
      }

      public function getAge(){
         echo "Age: $this->age" . PHP_EOL;;
      }
   }

   $b1 = new Person();
   $b1->getName();
   $b1->getAge();
   echo "Name : $b1->name Age: $b1->age" . PHP_EOL;
?>

Aşağıdaki çıktıyı üretecektir:
Name: Ravi
Age: 28
PHP Fatal error: Uncaught Error: Cannot access private property Person::$name in person.php:27

Hata mesajı, özel bir özelliğe genel bir kapsamdan erişilememesinin nedenini söyler.

Korunan Üyeler

Bir sınıf üyesine korumalı erişim belirtmenin etkisi, sınıf kalıtımı durumunda etkilidir. Genel üyelerin sınıfın dışındaki her yerden erişilebilir olduğunu ve özel üyelerin sınıfın dışındaki her yerden erişiminin engellendiğini biliyoruz.

Protected anahtar sözcüğü , aynı sınıftan bir nesneye ve miras alınan sınıftan bir nesneye erişim izni verir, diğer ortamların buna erişimini engeller.

Örnek

Person sınıfını miras alalım ve bir student sınıfı tanımlayalım. Name özelliğini private'dan protected'a değiştireceğiz. Student sınıfının name ve age özelliklerinin değerlerini yazdıran yeni bir public metodu getDetails() vardır.

Kişi sınıfı
PHP:
<?php
class Person {

   /* Member variables */
   protected $name;
   private $age;

   /*Constructor*/
   function __construct(string $param1="Ravi", int $param2=28) {
      $this->name = $param1;
      $this->age = $param2;
   }

   public function getName(){
      echo "Name: $this->name" . PHP_EOL;;
   }

   public function getAge() {
      echo "Age: $this->age" . PHP_EOL;;
   }
}

Öğrenci sınıfı
class student extends Person {
public function getDetails() {
echo "My Name: $this->name" . PHP_EOL;
echo "My age: $this->age" . PHP_EOL;
}
}
$s1 = new student();
$s1->getDetails();
?>

Aşağıdaki çıktıyı üretecektir:

My Name: Ravi
PHP Warning: Undefined property: student::$age in person.php on line 28
My age:

Aşağıdaki tablo PHP'de sınıf üyelerinin erişilebilirlik kurallarını göstermektedir.

php_encapsulation_2.jpg
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst