Имеем базовый класс:
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)
}
И при этом, что самое важное, никаких ошибок!