Видимостта на свойство или метод може да бъде дефинирана, чрез
използване на ключовите думи public, protected или private.
Полетата декларирани като public са
достъпни от всякъде. Protected полетата могат да бъдат
достъпни от дъщерните и родителските класове
(и в класа в които са дефинирани).
Private позволява достъпа само от тялото на класа в който
е дефинирано полето.
Свойствата на даден клас, трябва да бъдат декларирани като public, private или protected.
Пример 19-9. Декларация на свойство
<?php
/**
* Дефиниция на 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; // Работи
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Извежда Public, Protected и Private
/**
* Дефиниция на MyClass2
*/
class MyClass2 extends MyClass
{
// Може да се предефинират public и protected методи, но не и private
protected $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj->public; // Работи
echo $obj2->private; // Undefined
echo $obj2->protected; // Fatal Error
$obj2->printHello(); // Извежда Public, Protected2, но не и Private
?> |
|
Забележка:
Ключавата дума var все още се поддържа,
поради съображения за съвместимост (като синоним на ключовата дума public).
В PHP 5 преди 5.1.3 употребата и ще генерира предупреждение от тип
E_STRICT.
Методите на даден клас, трябва да бъдат декларирани като public, private или protected.
Методи, без такава декларация ще бъдат дефинирани като public.
Пример 19-10. Декларация на методи
<?php
/**
* Дефиниция на MyClass
*/
class MyClass
{
// Конструкторът трябва да бъде деклариран като public
public function __construct() { }
// Деклариране на public метод
public function MyPublic() { }
// Деклариране на protected метод
protected function MyProtected() { }
// Деклариране на private метод
private function MyPrivate() { }
// public метод
function Foo()
{
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate();
}
}
$myclass = new MyClass;
$myclass->MyPublic(); // Работи
$myclass->MyProtected(); // Fatal Error
$myclass->MyPrivate(); // Fatal Error
$myclass->Foo(); // Извикват се Public, Protected и Private
/**
* Дефиниция на MyClass2
*/
class MyClass2 extends MyClass
{
// public метод
function Foo2()
{
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate(); // Fatal Error
}
}
$myclass2 = new MyClass2;
$myclass2->MyPublic(); // Works
$myclass2->Foo2(); // Извикват се Public и Protected, но не и Private
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
?> |
|