PHP Handbuch
Zurück | Kapitel 19. Klassen und Objekte (PHP 5) | Weiter

# Sichtbarkeit

Die Sichtbarkeit einer Eigenschaft oder Methode kann definiert werden, indem man der Deklaration eines der Schlüsselwörter public, protected oder private voranstellt. Auf public deklarierte Elemente kann von überall her zugegriffen werden. Protected beschränkt den Zugang auf Vaterklassen und abgeleitete Klassen (sowie die Klasse die das Element definiert). Private grenzt die Sichtbarkeit einzig auf die Klasse ein, die das Element definiert.

## Sichtbarkeit von Membern

Klassenmember müssen mitteld public, private oder protected definiert werden.

Beispiel 19-9. Memberdeklaration
`<?php /** * Definiere MyClass */ class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj = new MyClass(); echo $obj->public; // Funktioniert echo $obj->protected; // Fataler Fehler echo $obj->private; // Fataler Fehler $obj->printHello(); // Zeigt Public, Protected und Private /** * Definiere MyClass2 */ class MyClass2 extends MyClass { // Wir können die public und protected Methoden neu deklarieren, // aber nicht private protected $protected = 'Protected2'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj2 = new MyClass2(); echo $obj->public; // Funktioniert echo $obj2->private; // Undefiniert echo $obj2->protected; // Fataler Fehler $obj2->printHello(); // Zeigt Public, Protected2, nicht Private ?>`

> Anmerkung: Die PHP 4 Methode, Variablen mit dem Schlüsselwort var zu deklarieren, ist für PHP 5 Objekte nicht länger gültig. Für die Abwärtskompatibilität wird eine Variable mit public Sichtbarkeit deklariert und eine `E_STRICT` Warnung ausgegeben.

## Sichtbarkeit von Methoden

Klassenmethoden müssen mit public, private oder protected definiert werden. Methoden ohne jede Deklaration sind als public definiert.

Beispiel 19-10. Methodendeklaration
`<?php /** * Definiere MyClass */ class MyClass { // Konstruktoren müssen public sein public function __construct() { } // Deklariere eine public Funktion public function MyPublic() { } // Deklariere eine protected Funktion protected function MyProtected() { } // Deklariere eine private Funktion private function MyPrivate() { } // Dies ist public function Foo() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); } } $myclass = new MyClass; $myclass->MyPublic(); // Funktioniert $myclass->MyProtected(); // Fataler Fehler $myclass->MyPrivate(); // Fataler Fehler $myclass->Foo(); // Public, Protected und Private funktionieren /** * Definiere MyClass2 */ class MyClass2 extends MyClass { // Dies ist public function Foo2() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); // Fataler Fehler } } $myclass2 = new MyClass2; $myclass2->MyPublic(); // Funktioniert $myclass2->Foo2(); // Public und Protected funktionieren, Private nicht ?>`

Zurück | Zum Anfang | Weiter
Konstruktoren und Destruktoren | Nach oben | Gültigkeitsbereichsoperator (::)