Örnek ve Statik Özellikler
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 15 / 91.
Bir sınıfta bir özellik oluşturduğunuzda, bunun her bir nesneye mi yoksa sınıfın kendisine mi ait olduğuna karar vermeniz gerekir. Bu ayrım, örnek özellikler ile statik özellikler arasındaki farktır.
Örnek özellikleri varsayılandır. Her nesne özelliğin kendi kopyasını alır ve bunu bir nesnede değiştirmek diğerlerini etkilemez:
<?php
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
$alice = new User("Alice");
$bob = new User("Bob");
echo $alice->name . "\n";
echo $bob->name . "\n";
Çıktı:
Alice
Bob
Statik özellikler belirli bir nesneye değil, sınıfa aittir. Bunları static anahtar sözcüğüyle tanımlar ve bir nesneyle -> yerine sınıf adını :: ile kullanarak erişirsiniz:
<?php
class User {
public static $count = 0;
public $name;
public function __construct($name) {
$this->name = $name;
self::$count++;
}
}
$alice = new User("Alice");
$bob = new User("Bob");
echo User::$count;
Çıktı:
2
$count değişkeninin tüm örnekler arasında nasıl paylaşıldığına dikkat edin. Her yeni User oluşturduğumuzda aynı $count değişkeni artırılır. Sınıfın içinde, statik özelliğe başvurmak için self::$count kullanırız.
Temel Nokta: Her nesnenin kendine ait bir değere ihtiyaç duyduğu durumlarda örnek özelliklerini kullanın. Bir sınıfın tüm nesneleri arasında veri paylaşmanız gerektiğinde, örneğin örnekleri saymak veya yapılandırma depolamak için statik özellikleri kullanın.
Görev
KolayHer ziyaretçiye özgü örnek özellikleri ile tüm ziyaretçiler arasında paylaşılan statik özellikler arasındaki farkı gösteren bir ziyaretçi izleme sistemi oluşturalım.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
Visitor.php: Bireysel ziyaretçileri izleyen ve toplam ziyaretçi sayısını tutan birVisitorsınıfı tanımlayın. Her ziyaretçinin kendine ait bir$nameözelliği (örnek özelliği) olmalı;$totalVisitorsözelliği ise tüm örnekler arasında paylaşılmalıdır (statik özellik). Yapıcı, bir ad kabul etmeli, bu adı atamalı ve toplam ziyaretçi sayısını artırmalıdır.getInfo()yöntemini ekleyin; bu yöntem"[name] is visitor #[totalVisitors]"değerini döndürmelidir.main.php: Visitor sınıfı dosyasını dahil edin, ardından"Alice","Bob"ve"Charlie"adlarına sahip üç ziyaretçi oluşturun (bu sırayla). Üçünü de oluşturduktan sonra her ziyaretçi üzerindegetInfo()çağrısının sonucunu yazdırın (her biri kendi satırında), ardından statik özelliğe doğrudan sınıf üzerindenVisitor::$totalVisitorskullanarak erişip toplam ziyaretçi sayısını yazdırın.
Sınıfın içinde statik özelliklere self::$propertyName kullanarak eriştiğinizi, sınıfın dışından ise ClassName::$propertyName kullandığınızı unutmayın. Örnek özelliklerine her zamanki gibi $this->propertyName ile erişilir.
Çıktınız, her ziyaretçiyi kendisine atanan numarayla göstermeli ve son satırda nihai toplam sayıyı göstermelidir.
Kendin dene
<?php
// Visitor sınıfını dahil et
require_once 'Visitor.php';
// TODO: "Alice", "Bob" ve "Charlie" adlarında üç ziyaretçi oluştur (bu sırayla)
// TODO: Her ziyaretçi için getInfo() sonucunu yazdır (her biri kendi satırında)
// TODO: Visitor::$totalVisitors kullanarak toplam ziyaretçi sayısını 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