Menu

PHP Soyut Sınıf: Soyut Metotlar ve Ne Zaman Kullanılır

Bir PHP soyut sınıfı abstract class Name ile tanımlanır ve örneklenemez: genişletilmek için vardır. Özellikler, bir yapıcı ve tamamlanmış metotların yanında, her alt sınıfın uygulaması gereken gövdesiz abstract metotlar tutabilir.

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

Bir PHP soyut sınıfı abstract class Name ile tanımlanır ve new ile oluşturulamaz. Diğer sınıflar için bir temeldir: özellikleri, bir yapıcısı ve tamamlanmış metotları olabilir, ayrıca her alt sınıfın uygulaması gereken gövdesiz abstract metotlar da içerebilir.

describe() Shape içinde bir kez yazılır ve her alt sınıfın sağladığı area() metodunu çağırır. Soyut sınıf metodun var olduğunu garanti eder, bu yüzden describe() ona güvenebilir.

Soyut bir sınıf new ile oluşturulamaz

Soyut bir sınıf bilerek eksiktir: Shape::area() metodunun gövdesi yoktur, bu yüzden düz bir Shape nesnesinin çalıştıracak hiçbir şeyi olmazdı. PHP onu oluşturmayı reddeder ve bir Error fırlatır:

Soyut metotlar: kurallar

Soyut bir metodun gövde yerine bir imzası ve bir noktalı virgülü vardır. Her alt sınıf onu uyumlu bir imza ve aynı ya da daha geniş görünürlükle uygulamalıdır: bir abstract protected metot alt sınıfta protected veya public olabilir, asla private olamaz. Tek bir soyut metodu olan bir sınıfın kendisi de soyut olarak tanımlanmalıdır.

Bir soyut metodu atlayan bir alt sınıf, alt sınıf da soyut olarak tanımlanıp metodu kendi alt sınıflarına bırakmadıkça, betiği daha hiçbir kısmı çalışmadan durdurur:

PHP Fatal error:  Class Square contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Shape::area) in /home/index.php on line 3

Şablon metot kalıbı

Soyut sınıf yazmanın en yaygın nedeni: birkaç adımın farklılaştığı sabit bir adım dizisi. Temel sınıf diziyi final bir metotta tutar ve alt sınıflar adımları doldurur. Burada aynı rapor hem düz metin hem HTML tablo olarak çalışır:

Çalıştırın, Page sekmesi düz metin sürümünün üstünde HTML tabloyu gösterir. open() ve close() metotlarının varsayılan gövdeleri vardır, bu yüzden yalnızca HtmlReport onları ezmeye gerek duyar; row() ise mantıklı bir varsayılanı olmadığı için soyuttur. render() metodunu final yapmak bir alt sınıfın adımların sırasını değiştirmesini önler.

Soyut bir sınıf bir arayüzü uygulayabilir

Soyut bir sınıf implements bildirebilir ve arayüzün bazı metotlarını alt sınıflarına bırakabilir. Bir arayüzü (tür) bir temel sınıfla (paylaşılan kod) eşleştirmenin standart yolu budur:

Kod Cache arayüzünü tür ipucu olarak kullanır, bu yüzden BaseCache sınıfını genişletemeyen (çünkü zaten başka bir şeyi genişleten) bir sınıf yine de Cache arayüzünü doğrudan uygulayabilir.

Soyut sınıf ne zaman kullanılır, ne zaman kullanılmaz

Bir ailedeki sınıflar gerçek kod paylaştığında soyut sınıfa başvurun: özellikler, bir yapıcı, hepsi için aynı olan metotlar. Temel sınıf yalnızca soyut metotlardan oluşacaksa kılık değiştirmiş bir arayüzdür ve bir sınıf birçok arayüz uygulayabilip yalnızca bir sınıfı genişletebildiği için arayüz daha iyi bir seçimdir. Yalnızca ilişkisiz sınıflar arasında birkaç yardımcı metot paylaşmak istiyorsanız onları tek bir üst sınıfın altına zorlamak yerine bir trait kullanın.

abstract class yazmadan önce hızlı bir test: her alt sınıf gerçekten temel sınıfın bir türü mü (Circle bir Shape dir)? Dürüst yanıt "bunlardan biri" değil de "bunu yapabilir" ise bir arayüz yazın.

Sıkça Sorulan Sorular

PHP'de soyut sınıf nedir?

abstract class Name ile tanımlanan ve new ile oluşturulamayan bir sınıftır. Diğer sınıflar için bir temeldir: özellikler, bir yapıcı ve normal metotlar içerebilir ve her alt sınıfın uygulaması gereken abstract metotlar tanımlayabilir.

PHP'de soyut metot nedir?

abstract ile ve gövdesiz tanımlanan bir metottur: abstract protected function render(array $rows): string;. Böyle bir metot içeren bir sınıfın kendisi de abstract olarak tanımlanmalıdır ve soyut olmayan her alt sınıf uyumlu bir imzaya sahip bir metot tanımlamalıdır.

PHP'de bir soyut sınıfın yapıcısı olabilir mi?

Evet. Soyut sınıf üzerinde new çağıramazsınız, ama yapıcısı bir alt sınıf oluşturulduğunda ya otomatik olarak (alt sınıfın yapıcısı yoksa) ya da parent::__construct(...) üzerinden çalışır.

PHP'de bir soyut sınıf örneklenebilir mi?

Hayır. Soyut bir sınıf üzerinde new Shape() bir Error fırlatır: Cannot instantiate abstract class Shape. Bunun yerine somut bir alt sınıftan bir nesne oluşturun, örneğin new Circle(2).

PHP'de soyut sınıfı ne zaman kullanmalıyım?

Birkaç ilişkili sınıf gerçek kod (özellikler, bir yapıcı, ortak metotlar) paylaşıp birkaç adımda farklılaştığında. Paylaşılan kodu soyut sınıfa koyun ve farklı adımları soyut olarak tanımlayın. Paylaşılan kod yoksa ve yalnızca bir sözleşmeye ihtiyacınız varsa bir arayüz kullanın.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA