2015-02-16 12 views
6

Diciamo che si dispone di una classe astratta:Puoi dichiarare un attributo privato all'interno di una classe astratta?

abstract class PersonAbstract 
{ 
    private $name = "Stack Overflow"; 
} 

E 'legale per dichiarare un attributo come privato all'interno di una classe astratta? O il fatto che questa classe dovrebbe essere estesa, la visibilità minima è protetta?

+1

Non faccio PHP, ma penso che potrebbe essere legale e sensato se si ha almeno un metodo in PersonAbstract che usa la variabile. – AFract

+2

Sì, è legale. Sebbene la classe sia 'abstract', le classi che ne derivano possono ancora chiamare i suoi metodi' protected/public', quei metodi * do * hanno accesso alla variabile 'private'. – haim770

+0

@Anas è possibile dichiarare l'attributo privato ma non è possibile accedervi nell'estensione della classe. – Whirlwind

risposta

8

Sì, è possibile avere un campo privato all'interno di una classe astratta. Tuttavia, questo campo sarà accessibile solo alle funzioni all'interno di quella classe astratta. Qualsiasi classe che erediti dalla tua classe astratta non sarà in grado di accedere al campo.

È possibile dichiarare sia campi che funzioni come pubblici, protetti o privati ​​all'interno di una classe astratta. Se un campo o una funzione è pubblica, è accessibile a chiunque. Se è protetto, è accessibile solo a quella classe e alle classi che ereditano da quella classe. Se è privato, è accessibile solo a quella classe.

Le funzioni astratte devono essere implementate da una classe ereditaria, quindi non ha senso (e probabilmente non funzionerà) avere una funzione astratta privata.

+0

Grazie per il chiarimento. –

Problemi correlati