这是我的班级
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()方法中初始化它时,子类可以访问它的值。 这怎么可能?为什么?
答案 0 :(得分:2)
私有属性只能在声明它的类的范围内访问。 Save()在父类(声明ID)中定义,因此可以访问它。
换句话说,private DataStore_Adapter::$id
可以访问DataStore_Adapter::save()
,因为它们都在同一个类中定义。如果要通过继承共享属性或方法,可以使用protected
。
答案 1 :(得分:0)
当你调用parent :: save()时,你正在调用DataStore_Adapter的save()方法,因此私有属性$ id对save()是可见的,因为它们都属于同一个类
答案 2 :(得分:0)
您可以阅读有关私人和其他关键字here.
的更多信息