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ı:
100Sı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.
Görev
KolayHassas 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 birEmployeesınıfı tanımlayın. Birprotected $nameözelliğine (alt sınıfların erişebilmesi için) ve birprivate $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 publicgetName()metodu, maaşı döndüren bir publicgetSalary()metodu ve maaşı verilen miktar kadar artıran bir publicgiveRaise($amount)metodu ekleyin.Manager.php:Employeesınıfını genişleten birManagersı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 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. Adı"Sarah", maaşı75000ve departmanı"Engineering"olan birManageroluşturun.getDetails()kullanarak yöneticinin ayrıntılarını yazdırın. Ardından yöneticiye5000tutarında zam verin vegetSalary()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
?>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 SözcüğüMetotlarÖzelliklerYapıcı (__construct)Yıkıcı (__destruct)Tekrar - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar SözcüğüMetot Geçersiz Kılmafinal Anahtar SözcüğüSoyut SınıflarTekrar - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicileri DerinlemesineGetter ve Setter'larBilgi GizlemeYapıcı Özellik Terfisi (8.0)Tekrar - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Composition ve KalıtımBağımlılık EnjeksiyonuAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlamaya Derinlemesine BakışÜreteçler ve Yineleyiciler13Tasarı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ıBileşik KalıpDepo Kalıbı2Namespace’ler ve Autoloading
Namespace’lere Girişuse Anahtar SözcüğüPSR-4 Autoloading StandardıComposer AutoloaderTekrar - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Çok Arayüz UygulamaArayüz ve Soyut Sınıf KarşılaştırmasıArayüzlerle Tür İpuçlarıTekrar - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString ve __debugInfo__get, __set, __isset, __unset__call ve __callStatic__clone ve Nesne Klonlama__serialize ve __unserializeTekrar - Özel Koleksiyon3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerSalt Okunur Özellikler (PHP 8.1)Tekrar - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmayı Yeniden Ele AlmaArayüzler Yoluyla Çok BiçimlilikTür İpuçları ve Birleşim TürleriGeç Bağlanan Statik ÇağrılarÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişBirden Çok Trait KullanımıTrait Çakışmalarını ÇözümlemeTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım Karşılaştırması12Tasarım Desenleri 1. Bölüm
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy DeseniKendi başına pratik yap: Online PHP derleyicisi