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 ö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.

Bir private özelliğe 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 dışından doğrudan $account->balance öğesine erişmeye çalışmak bir hataya neden olur. Bu, bakiyenin deposit yöntemi kullanılmadan değiştirilmesini engeller.

Bir 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

Anahtar 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 bir protected $name özelliği (böylece alt sınıflar buna erişebilir) ve bir private $salary özelliği (yalnızca bu sınıf maaşları doğrudan değiştirebilmelidir) olmalıdır. Kurucu metot (constructor) bir isim ve maaş kabul ederek her iki özelliği de atar. İsmi 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.phpEmployee sınıfını genişleten bir Manager sınıfı tanımlayın. Employee dosyasını en üste dahil edin. Bir private $department özelliği ekleyin. Kurucu metot isim, maaş ve departman kabul etmelidir — parent::__construct($name, $salary) ile üst sınıfın kurucusunu ç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şlarını yazdırın. Her çıktı kendi satırında olmalıdır.

Manager sınıfının korumalı $name özelliğine doğrudan nasıl 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.

Kendin dene

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

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

// TODO: getDetails() kullanarak yöneticinin ayrıntılarını yazdırın

// TODO: Yöneticiye 5000 tutarında bir 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