Domanda

Qualcuno può spiegare a me che cosa la differenza tra

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

e

class A extends B
{
     $a = new B
}

è?

Quali sono i vantaggi / svantaggi ci sono per estensione di una classe contro incluso il file .php?

È stato utile?

Soluzione

Il tuo include_once legge in un file sorgente, che in questo caso ha presumibilmente una definizione di classe per B in esso. Il tuo extends imposta classe A come ereditare classe B, cioè A ottiene tutto in B e può quindi definire le proprie modifiche a tale struttura di base. In realtà non c'è alcuna relazione a tutti tra le due operazioni, e le operazioni $a = new B sono prive di senso (per non parlare di errori di sintassi).

Altri suggerimenti

Nel caso in cui siete alla ricerca di una risposta di livello superiore ...

Utilizzando estende lega una a fare le cose in modo simile a B, mentre la creazione di un'istanza di B all'interno di un non impone alcuna restrizione A.

Il secondo approccio è chiamato Composizione ed è generalmente l'approccio preferito per sistemi edificio OO poiché non produce gerarchie alta classe ed è più flessibile lungo termine. Essa tuttavia resa codice leggermente più lento, e più di quanto poi semplice uso di prolunga.

I miei 2 centesimi

secondo, cioè estendentesi, - è operazione di classe. In primo luogo, cioè includono -. È un'operazione di file, (prima della compilazione)

Quindi - secondo non è possibile mai. senza prima.

Prima di tutto, comprendere è un comando che leggere un file sorgente PHP e lo tratta come è stato scritto al posto della direttiva include. È possibile utilizzarlo su qualsiasi file sorgente PHP e non è correlato al patrimonio di classe.

A proposito, se non si include il file contenente la classe di un codice sorgente non è possibile estende quella classe.

Extendind una classe con la parola chiave estende implicare il concetto di ereditarietà che è un concetto chiave nella programmazione orientata agli oggetti.

Si ottiene una classe (A) con alcuni metodi e hanno bisogno di una classe simile (B) con un leggero comportamento diverso, è possibile derivare la nuova classe extendig modificando solo i metodi che devono cambiare (si chiama la classe A e sovrascrivendo ) o aggiungendone di nuovi.

In fronte alla ereditarietà c'è il composizione . Con la composizione che non si estende una classe per cambiare la sua behavoiur invece quello che dovete fare un mosaico di classi al fine di ottenere il comportamento desiderato.

su Wikipedia è possibile trovare una spiegazione migliore sulle composizione di oggetti e [l'eredità di classe] ( http://en.wikipedia.org/wiki/Inheritance_(computer_science))

Sembra che ci sia un po 'di confusione su questi concetti, come estendere la classe A e, allo stesso tempo, si tenta di comporre esso (a proposito, la sintassi corretta è $ a = new B ( );. )

Un utile riferimento, ovviamente, [Gof, design pattern] ( http: / /en.wikipedia.org/wiki/Design_Patterns_(book))

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top