PHP Portal » PHP Handbuch » Sichtbarkeit

Werbung

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.

PHP Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/** * 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 $obj2->public; // Funktioniert echo $obj2->private; // Undefiniert echo $obj2->protected; // Fataler Fehler $obj2->printHello(); // Zeigt Public, Protected2, Undefined

Hinweis: Die PHP 4 Methode, Variablen mit dem Schlüsselwort var zu deklarieren, ist aus Gründen der Abswärtskompatibilität weiterhin unterstützt (als Synonym für das public-Schlüsselwort). In PHP 5 vor 5.1.3 hat dessen Verwendung eine E_STRICT-Warnung hervorgerufen.

Sichtbarkeit von Methoden

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

PHP Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/** * Definiere MyClass */ class MyClass { // Deklariert einen public Konstruktor 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 class Bar { public function test() { $this->testPrivate(); $this->testPublic(); } public function testPublic() { echo "Bar::testPublic\n"; } private function testPrivate() { echo "Bar::testPrivate\n"; } } class Foo extends Bar { public function testPublic() { echo "Foo::testPublic\n"; } private function testPrivate() { echo "Foo::testPrivate\n"; } } $myFoo = new foo(); $myFoo->test(); // Bar::testPrivate // Foo::testPublic