2015-02-16 18 views
6

Angenommen, Sie haben eine abstrakte Klasse haben:Können Sie ein Attribut private innerhalb einer abstrakten Klasse deklarieren?

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

Ist es legal, ein Attribut als privaten innerhalb einer abstrakten Klasse zu erklären? Oder die Tatsache, dass diese Klasse erweitert werden sollte, ist die minimale Sichtbarkeit geschützt?

+1

Ich mache nicht PHP, aber ich denke, es könnte legal und sinnvoll sein, solange Sie mindestens eine Methode in PersonAbstract haben, die die Variable verwenden. – AFract

+2

Ja, es ist legal. Obwohl die Klasse "abstrakt" ist, können die Klassen, die von ihr abgeleitet sind, ihre 'protected/public'-Methoden aufrufen, diese Methoden * haben * Zugriff auf die 'private'-Variable. – haim770

+0

@Anas können Sie private Attribute deklarieren, aber Sie können nicht darauf zugreifen, wenn Sie die Klasse erweitern. – Whirlwind

Antwort

8

Ja, Sie können ein privates Feld innerhalb einer abstrakten Klasse haben. Dieses Feld ist jedoch nur für Funktionen innerhalb dieser abstrakten Klasse zugänglich. Alle Klassen, die von Ihrer abstrakten Klasse erben, können nicht auf das Feld zugreifen.

Sie können sowohl Felder als auch Funktionen als öffentlich, geschützt oder privat innerhalb einer abstrakten Klasse deklarieren. Wenn ein Feld oder eine Funktion öffentlich ist, ist es für jeden zugänglich. Wenn es geschützt ist, ist es nur für diese Klasse und alle Klassen zugänglich, die von dieser Klasse erben. Wenn es privat ist, ist es nur für diese Klasse zugänglich.

Abstrakte Funktionen müssen von einer erbenden Klasse implementiert werden, daher macht es keinen Sinn (und wird wahrscheinlich nicht funktionieren), eine private abstrakte Funktion zu haben.

+0

Danke für die Klarstellung. –

Verwandte Themen