Это мой классКак частные переменные доступны?
abstract class DataStore_Adapter {
private $id;
abstract function update();
abstract function insert();
function __construct() {
$this-> id = 3;
}
function save() {
if(! is_null($this->id)) {
$this->update();
} else {
$this->insert();
}
}
}
class VS_DataStroe_Adapter extends DataStore_Adapter {
function __construct() {
parent:: save();
}
function update() {
echo "successfully updated!";
}
function insert() {
echo "successfully inserted!";
}
}
$vs_data = new VS_DataStroe_Adapter();
Выполнение этого кода я получить результат
успешно вставлен!
и если я удалить
$ этом-> ID = 3;
от конструктора метода DataStore_Adapter и поместить его внутри функции save() это дает мне результат;
успешно обновлено!
Мне нужно разъяснение относительно этого поведения. Поскольку я объявлял $ id как приватную переменную, я знаю, что ее доступ может быть доступен только через класс DataStore_Adapter. Но когда я инициализирую его внутри метода save(), подкласс может получить доступ к его значению. Как это возможно? и почему?
Где код, отображающий, что «подкласс может получить доступ к его значению»? В коде, который вы отправили, только сам класс получает доступ к его значению. – DCoder
Только сам класс (т. Е. 'DataStore_Adapter') обращается к частной переменной в вашем примере? Нет проблем с доступом к частной переменной-члену внутри функции-члена ... – BenM
ОК, как получилось id = null в приведенном выше примере? я думал, когда подкласс класса обращается к этому родительскому классу, каждый раз, когда конструктор DataStore_Adapter вызывается так, что id не может быть нулевым. – guitarlass