Класове и обекти (PHP 5)
PHP Manual

Видимост на полета

Видимостта на свойство или метод може да бъде дефинирана, чрез използване на ключовите думи public (общодостъпен), protected (защитен) или private (частен). Полетата декларирани като public са достъпни от всякъде. Полетата protected могат да бъдат достъпни от дъщерните и родителските класове (и в класа, в който са дефинирани). Private позволява достъпа само от тялото на класа, в който е дефинирано полето.

Видимост на свойствата

Свойствата на даден клас трябва да бъдат декларирани като public, private или protected.

Example #1 Декларация на свойство

<?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 
$obj2->public// Работи
echo $obj2->private// Undefined
echo $obj2->protected// Fatal Error
$obj2->printHello(); // Извежда Public, Protected2, Undefined

?>

Забележка: Ключавата дума var все още се поддържа от съображения за съвместимост (като синоним на ключовата дума public). В PHP 5 преди 5.1.3 употребата й ще генерира предупреждение от тип E_STRICT.

Видимост на методи

Методите на даден клас трябва да бъдат декларирани като public, private или protected. Методи без такава декларация ще бъдат дефинирани като public.

Example #2 Декларация на методи

<?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
?>


Класове и обекти (PHP 5)
PHP Manual