Yapıcı Özellik Terfisi (8.0)
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 42 / 91.
PHP 8.0, sınıfları tanımlarken gereksiz kod miktarını önemli ölçüde azaltan bir özellik olan yapıcı destekli özellik tanımlamayı kullanıma sundu. Özellikleri ayrı ayrı bildirmek ve ardından bunlara yapıcı içinde değer atamak yerine, ikisini tek adımda yapabilirsiniz.
İşte kullandığın geleneksel yaklaşım:
<?php
class Product {
private string $name;
private float $price;
public function __construct(string $name, float $price) {
$this->name = $name;
$this->price = $price;
}
public function getInfo(): string {
return $this->name . ": $" . $this->price;
}
}
Yapıcı terfi ile erişim değiştiricisini doğrudan yapıcı parametrelerine eklersiniz:
<?php
class Product {
public function __construct(
private string $name,
private float $price
) {}
public function getInfo(): string {
return $this->name . ": $" . $this->price;
}
}
$product = new Product("Laptop", 999.99);
echo $product->getInfo();
Çıktı:
Laptop: $999.99Bir oluşturucu parametresinin önüne private, protected veya public eklediğinizde PHP, özelliği otomatik olarak oluşturur ve değeri atar. Aynı oluşturucuda desteklenen ve normal parametreleri birlikte kullanabilirsiniz; ayrıca gerekirse oluşturucunun gövdesine mantık da ekleyebilirsiniz.
Önemli Nokta: Yapıcı destekli özellik tanımlama, tekrarlanan özellik bildirimlerini ve atamalarını ortadan kaldırarak sınıflarınızı daha düzenli ve okunması daha kolay hâle getirirken tam kapsülleme denetimini korur.
Görev
KolayYapıcı tanıtımının zarafetini sergileyen bir kişi yönetim sistemi oluşturalım. Kapsüllemeyi uygun şekilde korurken gereksiz şablon kodları ortadan kaldıran temiz ve modern bir PHP sınıfı oluşturacaksın.
Kodunu iki dosya arasında düzenleyeceksin:
Contact.php: Tüm özellikleri doğrudan yapıcı imzasında tanımlamak için yapıcı tanıtımını kullanan birContactsınıfı oluştur. Kişi bilgilerin şunları içermeli:- private bir
$nameözelliği (string) - private bir
$emailözelliği (string) "Not provided"varsayılan değerine sahip private bir$phoneözelliği (string)
"[name] | [email] | [phone]"döndüren public birgetFullDetails()metodu ekle. Ayrıca"Contact: [name]"döndüren birgetSummary()metodu ekle.- private bir
main.php: Contact dosyasını dahil et. Üç girdi alacaksın: bir ad, bir e-posta ve bir telefon numarası. İkiContactörneği oluştur:- İlk kişi üç değerin tümünü kullanmalı (ad, e-posta ve telefon)
- İkinci kişi yalnızca adı ve e-postayı kullanmalı (varsayılan telefon değerine güvenerek)
- İlk kişinin tüm ayrıntıları
- İlk kişinin özeti
- İkinci kişinin tüm ayrıntıları
- İkinci kişinin özeti
Yapıcı tanıtımının özellikleri tanımlamana, görünürlüklerini ayarlamana, türlerini belirtmene ve değerler atamana nasıl olanak tanıdığına dikkat et: bunların tümü tek ve okunabilir bir yapıcı imzasında gerçekleşir. Varsayılan değere sahip isteğe bağlı telefon parametresi, tanıtılan parametrelerin de tıpkı normal parametreler gibi varsayılan değerlerle sorunsuz şekilde çalıştığını gösterir.
Kendin dene
<?php
require_once 'Contact.php';
// Girdiyi oku
$name = trim(fgets(STDIN));
$email = trim(fgets(STDIN));
$phone = trim(fgets(STDIN));
// TODO: İlk kişiyi üç değerle oluştur (name, email, phone)
// TODO: İkinci kişiyi yalnızca name ve email ile oluştur (varsayılan phone kullan)
// TODO: İlk kişinin tüm detaylarını yazdır
// TODO: İlk kişinin özetini yazdır
// TODO: İkinci kişinin tüm detaylarını yazdır
// TODO: İkinci kişinin özetini 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