Egy tulajdonság vagy metódus láthatóságát közvetlenül a deklaráció előtt
kell megadni a public, protected vagy privát kulcsszavakkal. A publikusként (public)
deklarált elemek bárhonnan elérhetőek. A védetteket (protected) csak az öröklő és szülő
osztályokból lehet elérni (és abból az osztályból, amelyik definiálja az elemet).
A privát (private) láthatóságúakat csak a definiáló osztály éri el.
Az osztály adattagokat publikusként, privátként vagy védettként kell definiálni.
Példa 19-10. Adattag deklaráció
<?php /** * MyClass definiálása */ class MyClass { public $public = 'Publikus'; protected $protected = 'Védett'; private $private = 'Privát';
function printHello() { echo $this->public; echo $this->protected; echo $this->private; } }
$obj = new MyClass(); echo $obj->public; // Működik echo $obj->protected; // Fatális hiba echo $obj->private; // Fatális hiba $obj->printHello(); // Kiírja hogy Publikus, Védett és Privát
/** * MyClass2 definiálása */ class MyClass2 extends MyClass { // Újradeklarálhatjuk a publikus és a védett adattagot, de a privátot nem protected $protected = 'Védett2';
function printHello() { echo $this->public; echo $this->protected; echo $this->private; } }
$obj2 = new MyClass2(); echo $obj->public; // Működik echo $obj2->private; // Meghatározatlan echo $obj2->protected; // Fatális hiba $obj2->printHello(); // Kiírja hogy Publikus és Védett2, de nem írja ki hogy Privát
?>
|
|
Megjegyzés:
A PHP 4 változó deklarálási metódusa a var
kulcsszóval még támogatott kompatibilitási okok miatt (a public kulcsszó
szinonímájaként). Az 5.1.3 verzió előtti PHP 5 motorok
E_STRICT típusú hibát generáltak.
Az osztály metódosuait publikusként, privátként vagy védettként kell defiiálni.
A láthatóság nélküli metódusok pulikusak lesznek.
Példa 19-11. Method Declaration
<?php /** * MyClass definiálása */ class MyClass { // A kostruktoroknak pulikusnak kell lenniük public function __construct() { }
// Publikus metódus deklarálása public function MyPublic() { }
// Védett metódus deklarálása protected function MyProtected() { }
// Privát metódus deklarálása private function MyPrivate() { }
// Ez is publikus function Foo() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); } }
$myclass = new MyClass; $myclass->MyPublic(); // Működik $myclass->MyProtected(); // Fatális hiba $myclass->MyPrivate(); // Fatális hiba $myclass->Foo(); // A publikus, a védett és a privát is működik
/** * MyClass2 definiálása */ class MyClass2 extends MyClass { // Ez is publikus function Foo2() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); // Fatális hiba } }
$myclass2 = new MyClass2; $myclass2->MyPublic(); // Működik $myclass2->Foo2(); // A publikus és a védett múködik, a privát nem ?>
|
|