2013-05-13 15 views
5

PHP consente alle chiamate di utilizzare metodi privati ​​purché provengano da istanze della stessa classe.Perché PHP consente di chiamare metodi privati ​​da altre istanze?

Ecco come lo spiega the PHP docs:

oggetti dello stesso tipo avranno accesso ad ogni altri privati ​​e membri protetti anche se non sono le stesse istanze. Questo perché i dettagli specifici dell'implementazione sono già noti all'interno di quegli oggetti.

Non interrompe questo incapsulamento? Come si giustifica il fatto che lo implementation specific details are known lo giustifichi?

p.s. Ci sono altre lingue (orientate agli oggetti) che fanno questo?

+0

Secondo me infrange le regole della oop, tuttavia è questa la tua domanda? – Voitcus

risposta

1

Questo è vero per la maggior parte delle lingue, in java lo si può fare troppo, questo è perché l'oggetto è dalla stessa istanza, che "conosce" tutte le proprietà stesse istanze hanno

1

Come risposta alla post scriptum, Delphi (il cosiddetto "oggetto pascal") e Lazarus ("free pascal") consentono entrambi l'accesso alle proprietà private solo nella stessa unità che l'implementazione di classe è codificata. Quindi puoi inserire due classi diverse all'interno di una unità e hanno accesso alle rispettive proprietà private.

Non è consentito se due classi sono posizionate in unità diverse (diciamo che è qualcosa come un namespace in PHP).

1

In risposta a "non questa pausa l'incapsulamento?":

Anche se la definizione Encapsulation principle in OOP è un po 'vago. Il modo in cui lo capisco è che mantiene i dati privati ​​e la logica nei limiti di una classe.

L'incapsulazione viene utilizzata per nascondere i valori o lo stato di un oggetto di dati strutturato all'interno di una classe, impedendo l'accesso diretto a parti non autorizzate.

non so se questo comportamento di classi in PHP, Java e altri linguaggi è buono o cattivo, ma non credo che si rompe la incapsulamento delle classi.

+0

Sicuro. Per i membri della classe, 'mantiene i dati e la logica privati ​​nei limiti di una classe'. Ad esempio, i membri, tuttavia, questo non dovrebbe essere il caso. –

+1

@EmanuilRusev http://stackoverflow.com/a/4244833/679227 –

Problemi correlati