Normalde bir sınıf tanımlarız ve new komutu ile bu sınıftan bir obje oluştururuz. Bu objenin özellik ve metodlarına $this komutu ile erişebiliriz. Örneğin;
Not: Kodu aynı dizinde “php filename.php” şeklinde çalıştırabiliyoruz.
Not2: PHP_EOL ile bir alt satıra geçiyoruz. Böylece konsolda markaları alt alta düzgün bir şekilde görebiliriz.
Yukarıdaki kod konsola alt alta sırayıla “No Brand” ve “Mercedes” yazacaktır.
Bu hatırlatmadan sonra asıl konumuza geçebiliriz. Sınıfımızın getBrand() metodunu ve $model değişkenini “static” olarak güncelliyoruz. Bu sayede “new” ile yeni bir obje oluşturmadan statik olarak erişebileceğiz. Sınıfımızdan obje türetmediğimiz için atık $this komutunu kullanamıyoruz. Bunun yerine “self” komutunu kullanacağız. Böylece objemizin değil sınıfımızın metod veya özelliklerine erişebileceğiz.
Not: Statik metod ve özelliklere erişim için “->” yerine “::” kullanıyoruz.
Yukarıdaki kodu çalıştırdığımızda konsola sırasıyla “No Brand” ve “No Brand” yazdı. Ne demiştik, self ile sınıfın metod ve özelliklerine erişiriz. Car sınıfından türettiğimiz Mercedes sınıfındaki getModel() metodu Car sınıfından miras kaldı ve bu metod self:: ile erişim sağladığı için Car sınıfımızın $brand özelliğine erişiyor. Eğer Mercedes sınıfındaki $brand’e erişmiş olsaydı konsola “Mercedes” yazacaktı. Peki biz ne istiyoruz?
Mercedes sınıfımızı Car sınıfından türettik. Tüm özellikleri ve metodları miras aldık. $brand özelliğini “Mercedes” olarak güncelledik. Statik olarak erişmek için “static” metod ve özeliklerimizi belirttik. Car sınıfından markaya erişmek için zaten bir metodumuz var ve bu metod bizim işimizi Mercedes sınıfında da aynı şekilde görecek. Bu sınıfta tekrar yazarsak düzgün çalışacaktır ama neden aynı kodu kopyalayıp tekrar tekrar yazalım ki? Bu istenilmeyen durumdur. Bu durumdan kurtulmak için “static::” anahtar kelimesini kullanacağız.
self:: ile sınıfımıza atıfta bulunurken (yani obje değil, sınıfın özellik ve metodlarına erişim), static:: ile methodu çağırdığımız sınıftaki method veya özelliklere atıfta bulunur. Böylece biz Mercedes sınıfında, Car sınıfından miras aldığımız getModel() metodunu çağırdığımızda, Mercedes sınıfıdaki $brand özelliğine erişecek. Çünkü “static:.” anahtar kelimesini kullandık.
Kodumuzun çıktısı ise şöyle;