Bir sınıfın genişletilmesi ve PHP içinde dahil arasındaki fark nedir?

4 Cevap php

Birisi bana açıklayabilir misiniz ne arasındaki fark

include_once 'classb.php'
class A
{
     $a = new B
}

ve

class A extends B
{
     $a = new B
}

nedir?

. Php dosya içeren bir sınıf e karşı uzanan Ne avantajları / dezavantajları nelerdir?

4 Cevap

Sizin include_once Bu durumda muhtemelen B onun içinde bir sınıf tanımı vardır ki, bir kaynak dosyada okur. Sizin extends sınıf A inheriting class B, yani A ([{her şeyi alır gibi ayarlar 1 )]} ve ardından bu temel yapıya kendi değişiklikleri tanımlayabilir. Orada iki işlem arasında hiç bir ilişki değil gerçekten, ve $a = new B işlemleri (sözdizimi hatalarını saymıyorum) saçma vardır.

Eğer daha yüksek bir seviyede cevap arıyoruz ...

A içinde B bir örneğini oluşturarak A üzerinde herhangi bir kısıtlama getirmemektedir oysa uzanır kullanarak, benzer B şeyler yapıyor A bağlar

İkinci yaklaşım Kompozisyon denir ve uzun boylu Sınıf hiyerarşileri verim olmadığından genellikle bina OO sistemleri tercih edilen bir yaklaşım ve uzun vadeli daha esnektir. Ancak biraz daha yavaş kod verim ve daha sonra basit bir kullanımı uzatır daha bunun daha gelmez.

Benim 2 Cents

Her şeyden önce, bir php kaynak dosyasını okumak ve include yönergesiyle yerine yazılmış gibi davranır bir komut içerir. Herhangi bir php kaynak dosyada kullanabilirsiniz ve sınıf kalıtım ile ilgili değildir.

Eğer A sınıfı kaynak kodunu içeren dosyayı dahil etmezseniz arada, o sınıfını genişletir olamaz.

extends nesne yönelimli programlama önemli bir kavramdır kalıtım kavramını ima anahtar sözcüğüyle bir sınıf Extendind.

Bazı yöntemler ile bir sınıf (A) almak ve hafif bir farklı davranış ile benzer bir sınıf (B) gerekiyorsa, yeni bir sınıf türetmek extendig sınıfı A ve (o ([{denir değiştirmek zorunda sadece yöntemlerini değiştirerek 0)]}) veya yenilerini ekledi.

Ters olarak inheritance composition yoktur. Kompozisyon ile size istenen davranışı elde etmek için sınıfların bir patchwork yapmak zorunda bunun yerine behavoiur değiştirmek için bir sınıfını genişletir yok.

Wikipedia Eğer object composition ve class inheritance daha iyi bir açıklama bulabilirsiniz

Bu sizin A sınıfı genişletmek ve aynı zamanda, bunu oluşturmak için çalışırken, bu kavramlar üzerinde biraz confusione var gibi görünüyor (arada, doğru sözdizimi $a=new B();).

Bir yararlı bir referans, açıkça, Gof, Design patterns

second, ie extending, - is class operation. First, ie include - is file operation, (before compile).

So - second is not possible ever. without first.