Menu
Coddy logo textTech

Private ve Protected Özellikler

Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 18 / 91.

Şu ana kadar, her yerden erişilebilen public özellikler kullandık. Ancak bazen verilerinizi korumak için erişimi kısıtlamanız gerekir. PHP iki ek görünürlük belirleyicisi sağlar: private ve protected.

private bir özelliğe sadece onu tanımlayan sınıfın içinden erişilebilir:

<?php
class BankAccount {
    private $balance = 0;
    
    public function deposit($amount) {
        $this->balance += $amount;
    }
    
    public function getBalance() {
        return $this->balance;
    }
}

$account = new BankAccount();
$account->deposit(100);
echo $account->getBalance();

Çıktı:

100

Sınıfın dışından doğrudan $account->balance öğesine erişmeye çalışmak bir hataya neden olur. Bu, bakiyenin deposit yöntemini kullanmadan değiştirilmesini engeller.

protected özelliği benzer şekilde çalışır, ancak ebeveyn sınıfı genişleten alt sınıflar tarafından da erişilebilir:

<?php
class User {
    protected $email;
    
    public function __construct($email) {
        $this->email = $email;
    }
}

class Admin extends User {
    public function showEmail() {
        return $this->email;
    }
}

$admin = new Admin("admin@example.com");
echo $admin->showEmail();

Çıktı:

admin@example.com

Önemli Nokta: Özelliğe yalnızca tanımlayıcı sınıfın erişmesi gerektiğinde private kullanın. Alt sınıfların da erişime ihtiyaç duyduğu durumlarda protected kullanın. Her ikisi de doğrudan harici erişimi engelleyerek nesnenizin dahili durumunu güvende tutar.

challenge icon

Görev

Kolay

Hassas verileri private ve protected özellikler kullanarak nasıl koruyacağınızı gösteren güvenli bir çalışan yönetim sistemi oluşturalım.

Uygun erişim kontrolü ile çalışan bilgilerini yönetmek için birlikte çalışan üç dosya oluşturacaksınız:

  • Employee.php — Tüm çalışanlar için temel teşkil eden bir Employee sınıfı tanımlayın. Bu sınıfın protected $name özelliğine (böylece alt sınıflar ona erişebilir) ve private $salary özelliğine (sadece bu sınıf maaşları doğrudan değiştirebilmelidir) sahip olması gerekir. Yapıcı (constructor), bir isim ve maaş kabul ederek her iki özelliği de ayarlar. İsmi döndüren genel bir getName() metodu, maaşı döndüren genel bir getSalary() metodu ve maaşı verilen miktar kadar artıran genel bir giveRaise($amount) metodu ekleyin.
  • Manager.phpEmployee sınıfını genişleten bir Manager sınıfı tanımlayın. En üstte Employee dosyasını dahil edin. Özel bir $department özelliği ekleyin. Yapıcı; isim, maaş ve departman kabul etmelidir — isim ve maaş için üst sınıfın yapıcısını çağırın, ardından departmanı ayarlayın. Korumalı $name özelliğine doğrudan erişerek "[name] manages [department]" döndüren bir getDetails() metodu oluşturun. Ayrıca departmanı döndüren bir getDepartment() metodu ekleyin.
  • main.php — Her iki sınıf dosyasını da dahil edin. İsmi "Sarah", maaşı 75000 ve departmanı "Engineering" olan bir Manager oluşturun. getDetails() kullanarak yöneticinin ayrıntılarını yazdırın. Ardından yöneticiye 5000 tutarında bir zam yapın ve getSalary() kullanarak yeni maaşını yazdırın. Her çıktı kendi satırında olmalıdır.

Manager sınıfının korumalı $name özelliğine nasıl doğrudan erişebildiğine, ancak özel maaşa erişmek için getSalary() metodunu kullanması gerektiğine dikkat edin. Bu, protected ve private görünürlük arasındaki temel farkı gösterir — protected alt sınıf erişimine izin verirken, private verileri gerçekten gizli tutar.

Kopya kağıdı

PHP, sınıf özellikleri için üç görünürlük belirleyicisi sağlar:

  • public — her yerden erişilebilir
  • private — yalnızca tanımlandığı sınıf içinden erişilebilir
  • protected — tanımlandığı sınıf ve alt sınıflar içinden erişilebilir

Private özellikler:

class BankAccount {
    private $balance = 0;
    
    public function deposit($amount) {
        $this->balance += $amount;
    }
    
    public function getBalance() {
        return $this->balance;
    }
}

Private özelliklere sınıf dışından doğrudan erişilemez. Onlarla etkileşim kurmak için public metotları kullanın.

Protected özellikler:

class User {
    protected $email;
    
    public function __construct($email) {
        $this->email = $email;
    }
}

class Admin extends User {
    public function showEmail() {
        return $this->email; // Alt sınıf protected özelliğe erişebilir
    }
}

Protected özelliklere, üst sınıfı genişleten alt sınıflar tarafından erişilebilir.

Ne zaman kullanılır:

  • Özelliğe yalnızca tanımlandığı sınıfın erişmesi gerektiğinde private kullanın
  • Alt sınıfların da erişmesi gerektiğinde protected kullanın
  • Her ikisi de doğrudan dış erişimi engelleyerek nesnenin iç durumunu korur

Kendin dene

<?php
require_once 'Employee.php';
require_once 'Manager.php';

// TODO: Adı "Sarah", maaşı 75000 ve departmanı "Engineering" olan bir Yönetici (Manager) oluşturun

// TODO: getDetails() kullanarak yöneticinin detaylarını yazdırın

// TODO: Yöneticiye 5000 zam yapın

// TODO: getSalary() kullanarak yeni maaşı yazdırın
?>
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler