Public, Protected, Private
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 38 / 91.
Kapsülleme bölümüne hoş geldin! Kapsülleme, sınıfının iç verilerine erişimi kontrol etmekle ilgilidir. PHP, özelliklere ve metotlara nereden erişilebileceğini belirleyen üç erişim belirleyicisi sunar: public, protected ve private.
Her değiştiricinin nasıl çalıştığı aşağıda açıklanmıştır:
<?php
class BankAccount {
public $accountHolder; // Her yerden erişilebilir
protected $accountNumber; // Bu sınıfta ve alt sınıflarda erişilebilir
private $balance; // Yalnızca bu sınıfta erişilebilir
public function __construct($holder, $number, $balance) {
$this->accountHolder = $holder;
$this->accountNumber = $number;
$this->balance = $balance;
}
public function getBalance() {
return $this->balance;
}
}
$account = new BankAccount("John", "12345", 1000);
echo $account->accountHolder . "\n"; // Çalışır - public
echo $account->getBalance(); // Çalışır - public method
Çıktı:
John
1000$account->balance öğesine doğrudan erişmeye çalışmak, bu özellik private olduğu için hataya neden olur. Aynı durum, sınıf hiyerarşisinin dışından $account->accountNumber için de geçerlidir. Bu koruma, hassas verilerin yalnızca denetimli yöntemler aracılığıyla değiştirilebilmesini sağlar.
| Değiştirici | Aynı Sınıf | Alt Sınıf | Dışarıdan |
|---|---|---|---|
public | Evet | Evet | Evet |
protected | Evet | Evet | Hayır |
private | Evet | Hayır | Hayır |
Önemli Nokta: Doğrudan erişilmemesi gereken dahili veriler için private, child sınıfların ihtiyaç duyduğu veriler için protected ve yalnızca güvenli harici erişim için public kullanın.
Görev
KolayHassas verileri erişim belirleyicilerinin nasıl koruduğunu gösteren güvenli bir çalışan yönetim sistemi oluşturalım. Kodun nerede çalıştığına bağlı olarak farklı bilgi düzeylerine erişilebilen bir sınıf hiyerarşisi oluşturacaksın: sınıfın içinde, alt sınıfta veya dışarıdan.
Kodunu üç dosya arasında düzenleyeceksin:
Employee.php: Çalışan verilerini uygun görünürlük düzeyleriyle yöneten birEmployeesınıfı oluştur. Sınıf şunlara sahip olmalı:- Çalışanın adı için bir
publicözelliği olan$name(herkesin görmesi güvenlidir) - Dahili kimlik için bir
protectedözelliği olan$employeeId(alt sınıflar tarafından gereklidir) - Hassas maaş bilgileri için bir
privateözelliği olan$salary(bu özelliğe doğrudan yalnızca bu sınıf erişebilmelidir)
getSalary()public metodu ekle. Protected verilere erişmenin kontrollü yolu budur. Ayrıca"[name] works here"döndüren birgetPublicInfo()public metodu ekle.- Çalışanın adı için bir
Manager.php:Employeesınıfını genişleten birManagersınıfı oluştur. Employee dosyasını dahil et. Yapıcı; name, employeeId, salary ve bir departman adını kabul etmelidir. İlk üç değerle üst sınıfın yapıcısını çağır, ardından departmanı private bir özellikte sakla."Manager [name] (ID: [employeeId]) leads [department]"döndüren birgetTeamInfo()public metodu ekle. Alt sınıfın protected$employeeIdözelliğine erişebildiğine, ancak private maaşa erişmek içingetSalary()kullanması gerektiğine dikkat et.main.php: Manager dosyasını dahil et. Dört girdi alacaksın: bir ad, bir çalışan kimliği, bir maaş (dize olarak alıp tam sayıya dönüştüreceksin) ve bir departman adı. Bu değerlerle birManagerörneği oluştur. Üç satır yazdır:- Doğrudan erişilen yöneticinin adı (public özellik)
getTeamInfo()çağrısının sonucugetSalary()çağrısının sonucu
Bu görev kapsüllemenin işleyişini gösterir: ada serbestçe erişilebilir, çalışan kimliği protected görünürlük aracılığıyla alt sınıflarla paylaşılır ve maaş üst sınıfta kilitli kalır: yalnızca kontrollü bir public metot aracılığıyla erişilebilir.
Kendin dene
<?php
require_once 'Manager.php';
// Girdileri oku
$name = trim(fgets(STDIN));
$employeeId = trim(fgets(STDIN));
$salary = intval(trim(fgets(STDIN)));
$department = trim(fgets(STDIN));
// TODO: Girdi değerleriyle bir Manager örneği oluştur
// TODO: Yöneticinin adını yazdır (doğrudan public özellik olarak erişilir)
// TODO: getTeamInfo() çağrısının sonucunu yazdır
// TODO: getSalary() çağrısının sonucunu 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