Конструктор — Почему закрытые переменные PHP работают с расширенным классом?

Разве это не должно генерировать ошибку, когда я пытаюсь установить значение свойства из расширенного класса вместо базового класса?

<?php
class first{
public $id = 22;
private $name;
protected $email;
public function __construct(){
echo "Base function constructor<br />";
}
public function printit(){
echo "Hello World<br />";
}
public function __destruct(){
echo "Base function destructor!<br />";
}
}
class second extends first{
public function __construct($myName, $myEmail){
$this->name = $myName;
$this->email = $myEmail;
$this->reveal();
}
public function reveal(){
echo $this->name.'<br />';
echo $this->email.'<br />';
}
}
$object = new second('sth','[email protected]');

?>

2

Решение

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

Вот UML, чтобы показать вам состояние:

введите описание изображения здесь

Обратите внимание: у подкласса по-прежнему есть доступ ко всем public а также protected методы и переменные из его суперкласса — но не в диаграмме UML!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]