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.

Şimdiye kadar, her yerden erişilebilen public özellikleri 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 özelliğine yalnızca 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 erişmeye çalışmak bir hataya neden olur. Bu, deposit yönteminden geçmeden bakiyenin değiştirilmesini engeller.

protected özelliği benzer şekilde çalışır, ancak üst 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ımlayan 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 nesnenizin iç durumunu güvende tutar.

challenge icon

Görev

Kolay

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

Çalışan bilgilerini uygun erişim denetimiyle yönetmek üzere birlikte çalışan üç dosya oluşturacaksınız:

  • Employee.php: Tüm çalışanlar için temel görevi gören bir Employee sınıfı tanımlayın. Bir protected $name özelliğine (alt sınıfların erişebilmesi için) ve bir private $salary özelliğine (maaşları doğrudan yalnızca bu sınıf değiştirebilmelidir) sahip olmalıdır. Yapıcı, bir ad ve maaş kabul ederek her iki özelliği de ayarlar. Adı döndüren bir public getName() metodu, maaşı döndüren bir public getSalary() metodu ve maaşı verilen miktar kadar artıran bir public giveRaise($amount) metodu ekleyin.
  • Manager.php: Employee sınıfını genişleten bir Manager sınıfı tanımlayın. En üstte Employee dosyasını dahil edin. Private bir $department özelliği ekleyin. Yapıcı ad, maaş ve departman kabul etmelidir: parent::__construct($name, $salary) ile üst sınıfın yapıcısını çağırın, ardından departmanı ayarlayın. Protected $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. Adı "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 zam verin ve getSalary() kullanarak yeni maaşını yazdırın. Her çıktı kendi satırında olmalıdır.

Manager sınıfının protected $name özelliğine doğrudan erişebildiğine, ancak private 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.

Kendin dene

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

// TODO: Adı "Sarah", maaşı 75000 ve departmanı "Engineering" olan bir Manager oluştur

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

// TODO: Yöneticiye 5000 zam yap

// TODO: getSalary() kullanarak yeni maaşı yazdır
?>
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

Kendi başına pratik yap: Online PHP derleyicisi