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ı:
100Sı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.
Görev
KolayHassas 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 birEmployeesınıfı tanımlayın. Bu sınıfınprotected $nameözelliğine (böylece alt sınıflar ona erişebilir) veprivate $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 birgetName()metodu, maaşı döndüren genel birgetSalary()metodu ve maaşı verilen miktar kadar artıran genel birgiveRaise($amount)metodu ekleyin.Manager.php—Employeesınıfını genişleten birManagersı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 birgetDetails()metodu oluşturun. Ayrıca departmanı döndüren birgetDepartment()metodu ekleyin.main.php— Her iki sınıf dosyasını da dahil edin. İsmi"Sarah", maaşı75000ve departmanı"Engineering"olan birManageroluşturun.getDetails()kullanarak yöneticinin ayrıntılarını yazdırın. Ardından yöneticiye5000tutarında bir zam yapın vegetSalary()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şilebilirprivate— yalnızca tanımlandığı sınıf içinden erişilebilirprotected— 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
privatekullanın - Alt sınıfların da erişmesi gerektiğinde
protectedkullanı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
?>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
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesneler$this Anahtar KelimesiMetotlarÖzelliklerYapıcı Metot (__construct)Yıkıcı Metot (__destruct)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar KelimesiMetot Geçersiz Kılmafinal Anahtar KelimesiSoyut SınıflarÖzet - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicilere Derinlemesine BakışGetter ve Setter MetotlarıBilgi GizlemeConstructor Promotion (8.0)Özet - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımDependency InjectionAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlama: Derinlemesine İncelemeGenerator'lar ve Iterator'lar13Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı2İsim Alanları ve Autoloading
İsim Alanlarına Girişuse Anahtar KelimesiPSR-4 Autoloading StandartıComposer AutoloaderÖzet - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Fazla Arayüz UygulamaArayüz vs Soyut SınıfArayüzler ile Tip BelirlemeÖzet - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Nesne Klonlama__serialize & __unserializeÖzet - Özel Koleksiyon3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerReadonly Özellikler (PHP 8.1)Özet - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmaya Yeniden BakışArayüzler ile Çok BiçimlilikType Hinting ve Union TypesLate Static BindingÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişÇoklu Trait KullanımıTrait Çakışma ÇözümüTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım12Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı15Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi