Menu

PHP Yapıcı Metot: __construct ve Özellik Yükseltme

PHP yapıcısı, new ClassName(...) yazdığınızda otomatik olarak çalışan __construct() metodudur. Yapıcı özellik yükseltmeyi (property promotion), varsayılan ve adlandırılmış argümanları, doğrulamayı, parent::__construct() çağrısını ve statik fabrika metotlarıyla birden çok yapıcıyı nasıl taklit edeceğinizi öğrenin.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

PHP yapıcısı __construct() adlı bir metottur. new ClassName(...) yazdığınızda PHP onu otomatik olarak çağırır ve parantez içindeki argümanlar onun parametreleri olur, böylece nesne değerleri zaten ayarlanmış olarak hayata başlar.

Yapıcı olmadan boş bir nesne oluşturur ve her özelliği sonradan ayarlardınız; birini unutmanızı hiçbir şey engellemezdi. Bir yapıcıyla argümansız new User() bir ArgumentCountError olur.

Yapıcı özellik yükseltme

Bir özelliği tanımlamak, onu parametre olarak listelemek ve $this->name = $name atamasını yapmak her adı üç kez tekrarlar. PHP 8.0'dan beri bir yapıcı parametresinin önündeki bir görünürlük anahtar kelimesi üçünü birden yapar:

Yükseltilmiş bir parametre readonly da olabilir (public readonly string $id); bu, değiştirilemez bir değer nesnesi yazmanın en kısa yoludur. Yükseltilmiş ve normal parametreleri karıştırabilirsiniz ve yapıcı gövdesi, yükseltilmiş özellikler atandıktan sonra çalışan kod içermeye devam edebilir.

Varsayılan değerler ve adlandırılmış argümanlar

Yapıcı parametreleri her fonksiyon gibi varsayılan değer alır. Varsayılanlı parametreler zorunlu olanlardan sonra gelir. Adlandırılmış argümanlarla (PHP 8.0) çağıran, önündeki her varsayılanı tekrarlamak yerine istediği seçeneğe atlayabilir:

Çalıştırın: çıktı HTML içerir, bu yüzden Page sekmesi oluşturulan üç düğmeyi, Output sekmesi ise PHP'nin yazdırdığı etiketleri gösterir. (new Button('Save'))->render() içindeki parantezlere dikkat edin: PHP 8.4'ten beri isteğe bağlıdırlar, ama PHP 8.3 onları ister.

Argümanları yapıcıda doğrulama

Bir yapıcı false veya bir hata kodu döndüremez: döndürdüğü her şey yok sayılır. Hatalı girdiyi reddetmek için bir istisna fırlatın. Nesne o zaman hiç oluşturulmaz, böylece programın geri kalanı aldığı her Temperature nesnesine güvenebilir.

try catch sayfası bu istisnaları yakalamayı daha ayrıntılı anlatır.

Statik fabrika metotlarıyla birden çok yapıcı

PHP'de yapıcı aşırı yükleme yoktur: bir sınıf, bir __construct. Bir nesne farklı girdilerden (bir tarih dizgesi, bir dizi, bir zaman damgası) oluşturulabiliyorsa, argümanları hazırlayıp new static(...) çağıran adlandırılmış statik metotlar ekleyin. Yapıcıyı private yapmak herkesi fabrikalardan geçmeye zorlar.

Sınıfın dışından new Color(1, 2, 3) artık bir Error fırlatır ("Call to private Color::__construct() from global scope"). static sayfası burada neden new self yerine new static kullanıldığını açıklar.

Üst sınıfın yapıcısını parent::__construct ile çağırma

Bir alt sınıf kendi yapıcısını tanımladığında üst sınıfın yapıcısı kendiliğinden çalışmaz. Onu parent::__construct(...) ile, genellikle ilk sırada çağırın, böylece alt sınıf kendi özelliklerini eklemeden önce üst sınıfın özellikleri ayarlanır:

Alt sınıfın hiç yapıcısı yoksa PHP üst sınıfınkini kullanır ve new Truck('Volvo') argümanlarını doğrudan Vehicle::__construct metoduna verirdi. Bununla ilgili daha fazlası kalıtım sayfasında.

parent::__construct çağrısını unutmak

Bu hata, gerçekleştiği satırda hiçbir hata üretmez. Alt sınıfın yapıcısı çalışır, üst sınıfın türlü özellikleri başlatılmamış kalır ve program daha sonra, ilk okumanın yapıldığı yerde başarısız olur:

Post::__construct metodunun ilk satırı olarak parent::__construct(); ekleyin ve tekrar çalıştırın: tarihi yazdırır. İlgili bir metot olan __destruct(), bir nesneye yapılan son referans ortadan kalktığında ya da betik bittiğinde çalışır. Günlük kodda nadiren gerekir, çünkü PHP her isteğin sonunda dosyaları kendisi kapatır ve belleği serbest bırakır.

Sıkça Sorulan Sorular

PHP'de __construct nedir?

__construct() yapıcıdır: new nesneyi oluşturduktan hemen sonra PHP'nin otomatik olarak çağırdığı bir metot. new User('Ada', 36) içine verdiğiniz argümanlar __construct(string $name, int $age) metoduna aktarılır ve bu metot genellikle onları özelliklerde saklar.

PHP'de yapıcı özellik yükseltme nedir?

PHP 8.0'dan beri bir yapıcı parametresine bir görünürlük anahtar kelimesi koymak özelliği tek adımda tanımlar ve atar: public function __construct(private string $name) {} private string $name; tanımlayıp gövdede $this->name = $name; yazmakla aynıdır.

Bir PHP sınıfının birden çok yapıcısı olabilir mi?

Hayır. PHP'de metot aşırı yükleme yoktur, bu yüzden bir sınıfın tek bir __construct metodu olur. Varsayılanlı isteğe bağlı parametreler kullanın ya da doğru argümanlarla new static(...) çağıran public static function fromArray(array $data): static gibi statik fabrika metotları ekleyin.

PHP'de üst sınıfın yapıcısı otomatik olarak çağrılır mı?

Yalnızca alt sınıfın kendi yapıcısı yoksa. Alt sınıf __construct tanımlıyorsa, parent::__construct(...) metodunu kendiniz çağırmadıkça üst sınıfın yapıcısı çalışmaz; genellikle ilk satırda çağrılır.

Bir PHP yapıcısı değer döndürebilir mi?

Hayır. new size her zaman nesneyi verir ve __construct ne döndürürse yok sayılır. Bir sorunu bildirmek için yapıcıdan bir istisna fırlatın, örneğin throw new InvalidArgumentException('Age must be positive').

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA