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 (::)