Видимость

Видимость свойства или метода может быть определена путем префиксирования объявления ключевыми словами public, protected или private. К элементам, объявленным public, доступ возможен отовсюду. Protected ограничивает доступ до унаследованных и родительских классов (и до класса, который определяет элемент). Private ограничивает видимость только границами класса, в котором элемент определен.

Члены класса должны быть определены с ключевыми словами public, private или protected.

Объявление члена

<?php
/**
* Define 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; // Фатальная ошибка
echo $obj->private; // Fatal Error
$obj->printHello(); // Показывает Public, Protected and Private


/**
* Define 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
?>

Замечание: Способ объявления переменной в PHP4 с помощью ключевого слова var все еще поддерживается по причинам совместимости (как синоним ключевого слова public). В PHP5 до 5.1.3, ключевое слово var будет генерировать предупреждение E_STRICT.

Видимость метода.

Методы класса должны быть определены с помощью public, private или protected. Методы без любого из этих ключевых слов определяются, как public.

Определение метода

<?php
/**
* Define MyClass
*/
class MyClass
{
// Contructors must be public
public function __construct() { }

// Declare a public method
public function MyPublic() { }

// Declare a protected method
protected function MyProtected() { }

// Declare a private method
private function MyPrivate() { }

// This is 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 работают

/**
* Define MyClass2
*/
class MyClass2 extends MyClass
{
// This is public
function Foo2()
{
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate(); // Fatal Error
}
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // Работает
$myclass2->Foo2(); // Public и Protected работает, Private не работает
?>