2009-06-09 6 views

risposta

8

Il tuo include_once legge in un file sorgente, che in questo caso presumibilmente ha una definizione di classe per B in esso. Il extends imposta la classe A come inheriting classe B, ad esempio A ottiene tutto in B e può quindi definire le proprie modifiche a quella struttura di base. Non esiste alcuna relazione tra le due operazioni e le operazioni $a = new B non hanno senso (per non parlare degli errori di sintassi).

6

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 la creazione di sistemi OO poiché non offre gerarchie di Classe alte ed è più flessibile a lungo termine. Tuttavia, produce un codice leggermente più lento, e più di quello del semplice uso di estensioni.

I miei 2 centesimi

+0

ciò che è più lenta estensione o comprendente Ho appena fatto un piccolo punto di riferimento, e ho trovato che l'estensione rende il codice leggermente più lento è questo quello che volevi dire..?.? – daniel

+1

Dire che voglio invocare foo su A e delega foo a B, quindi ci sarà tempo per due chiamate di metodo nell'approccio Composizione. Se A estende B, invocando foo su A viene considerata una chiamata al metodo e non è necessario eseguire una ricerca tranne quando le classi sono definite (cosa che accade una volta). –

1

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 di origine php e non è correlato all'ereditarietà della classe.

A proposito, se non si include il file contenente il codice sorgente di classe A non è possibile estendere tale classe.

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

Si ottiene una classe (A) con alcuni metodi e si richiede una classe simile (B) con un comportamento leggermente diverso, è possibile derivare la nuova classe estendendo la classe A e modificando solo i metodi che devono cambiare (è chiamato ignorando) o aggiungendone di nuovi.

In fronte alla eredità c'è la composizione. Con la composizione non si estende una classe per cambiare il suo comportamento, invece si deve fare un patchwork di classi per ottenere il comportamento desiderato.

su Wikipedia si può trovare una spiegazione migliore sulle object composition 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, è prova a comporlo (a proposito, la sintassi corretta è $ a = new B();).

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

2

secondo, vale a dire l'estensione, - è un'operazione di classe In primo luogo, cioè includono -. È un'operazione di file, (prima della compilazione)

.

Quindi - secondo non è possibile mai senza prima

Problemi correlati