Имеем базовый класс:
class Base
{
private $var = 0;
public function out()
{
echo $this->var, "\n";
}
}
Создаем дочерний класс:
class Child extends Base
{
public function __construct()
{
$this->var = 10;
}
public function out2()
{
echo $this->var, "\n";
}
}
Тут явная ошибка: Base::$var недоступен! Но только не в PHP: при создании экземпляра класса Child будет создан второй $var, только теперь уже public. Метод out() будет работать с private-версией, а out2() - с public.
$x = new Child();
$x->out();
$x->out2();
var_dump($x);
0
10
object(Child)#1 (2) {
["var":"Base":private]=>
int(0)
["var"]=>
int(10)
}
И при этом, что самое важное, никаких ошибок!