Welcome to php club

PHP FAQ from PHPclub.ru: PHP5/Visibility ...

Начало | Каталог | Изменения | НовыеКомментарии | Вам запрещён доступПользователи | Вам запрещён доступРегистрация | Вход:  Пароль:  

Приватные, защищенные и публичные свойства и методы

Краткое описание

Свойства

В PHP5 появились приватные и защищенные свойства, которые позволяют определить область их видимости. Приватные свойства доступны только в том классе, в котором они определены, в то время как защищенные доступны во всех классах наследованных от того, где свойство определено. Публичные свойства доступны из любой области видимости. Приватные, защищенные и публичные свойства свойства определяются с использованием ключевых слов private, protected и public, соответственно, перед именем свойства. Свойства, определяемые ранее ключевым словом var, являются публичными, т.е. var является синонимом public. Однако var является устаревшим.
Пример:

<?php
class MyClass {
    private   
$private   = 'приватное';
    protected
$protected = 'защищенное';
    public    
$public    = 'публичное';

    function
printOut() {
        echo
'MyClass::printOut() ' . $this->private   . "\n";
        echo
'MyClass::printOut() ' . $this->protected . "\n";
        echo
'MyClass::printOut() ' . $this->public    . "\n";
    }
}

class
MyClass2 extends MyClass {
    protected
$protected = 'защищенное2';

    function
printOut() {
        
parent::printOut();
        echo
'MyClass2::printOut() ' . $this->private   . "\n";
        echo
'MyClass2::printOut() ' . $this->protected . "\n";
        echo
'MyClass2::printOut() ' . $this->public    . "\n";
    }
}

$o = new MyClass();
//echo $o->private   . "\n"; // Fatal error: Cannot access private property MyClass::$private
//echo $o->protected . "\n"; // Fatal error: Cannot access protected property MyClass::$protected
echo $o->public    . "\n";
$o->printOut();

$o = new MyClass2();
echo
$o->private   . "\n";
//echo $o->protected . "\n"; // Fatal error: Cannot access protected property MyClass2::$protected
echo $o->public    . "\n";
$o->printOut();
?>

Результат:

Методы

Вместе с приватными и защищенными свойствами в PHP5 также появились приватные и защищенные методы. Они определяются с использованием ключевых слов private и protected перед ключевым словом function. Публичные методы определяются, либо ключевым словом public, либо вообще без такового перед function.
Пример:

<?php
class Foo {
    private function
aPrivateMethod() {
        echo
"Foo::aPrivateMethod() вызван.\n";
    }

    protected function
aProtectedMethod() {
        echo
"Foo::aProtectedMethod() вызван.\n";
        
$this->aPrivateMethod();
    }
}

class
Bar extends Foo {
    public function
aPublicMethod() {
        echo
"Bar::aPublicMethod() вызван.\n";
        
$this->aProtectedMethod();
    }
}

$o = new Bar();
//$o->aPrivateMethod(); // Fatal error: Call to private method Foo::aPrivateMethod() from context ''
//$o->aProtectedMethod(); // Fatal error: Call to protected method Foo::aProtectedMethod() from context ''
$o->aPublicMethod();
?>

Результат:

Проблемы с обратной совместимостью

Старый код без пользовательских функций, методов или классов с именами public, protected или private должен работать без изменений.

Дополнительные сведения

Описание в оригинальной документации: http://www.php.net/oop5.visibility


 
Комментариев нет. [Показать комментарии/форму]