Оглавление

Закрытые свойства и методы

Свойство или метод, объявленные как закрытые (private), доступны лишь в классе, в котором они определены. Это означает, что даже если новый класс расширяет класс, содержащий определение закрытого свойства, это свойство или метод не будут доступны в дочернем классе.

 
Чтобыэто продемонстрировать, объявимметод  getProperty() в классе MyClass как закрытый и попытаемся вызвать метод callProtected() из класса MyOtherClass:

 

<?php 
 
class MyClass 
{ 
    public $prop1 = "Это свойство класса!"; 
 
    public function __construct() 
    { 
        echo 'Класс "', __CLASS__, '" инициирован!<br />'; 
    } 
 
    public function __destruct() 
    { 
        echo 'Класс "', __CLASS__, '" уничтожен.<br />'; 
    } 
 
    public function __toString() 
    { 
        echo "Используем метод toString: "; 
        return $this->getProperty(); 
    } 
 
    public function setProperty($newval) 
    { 
        $this->prop1 = $newval; 
    } 
 
    private function getProperty()           
    {                                        
        return $this->prop1 . "<br />";      
    }                                        
} 
 
class MyOtherClass extends MyClass 
{ 
    public function __construct() 
    { 
        parent::__construct(); 
                echo "Новый конструктор в классе " . __CLASS__ . ".<br />"; 
    } 
 
    public function newMethod() 
    { 
        echo "Новый меиод в классе " . __CLASS__ . ".<br />"; 
    } 
 
    public function callProtected() 
    { 
        return $this->getProperty(); 
    } 
} 
 
// Создать новый объект
$newobj = new MyOtherClass; 
 
// Использовать метод из родительского класса 
echo $newobj->callProtected();                
 
?> 


После перезагрузки браузера вы столкнетесь с такой ошибкой.

Класс "MyClass" инициирован!
Новый конструктор в классе MyOtherClass.

Fatal error: Call to private method MyClass::getProperty() from context 'MyOtherClass' in F:\xampp\htdocs\testing\test.php on line 49
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити