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ı:
100Sı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.comAnahtar 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ın birprotected $nameözelliği (böylece alt sınıflar buna erişebilir) ve birprivate $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 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. 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 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ş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
?>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