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.
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.
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 ?>
|
|