如何访问私有变量?

时间:2013-03-05 09:58:24

标签: php abstract-class visibility private-members

这是我的班级

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()方法中初始化它时,子类可以访问它的值。 这怎么可能?为什么?

3 个答案:

答案 0 :(得分:2)

私有属性只能在声明它的类的范围内访问。 Save()在父类(声明ID)中定义,因此可以访问它。

换句话说,private DataStore_Adapter::$id可以访问DataStore_Adapter::save(),因为它们都在同一个类中定义。如果要通过继承共享属性或方法,可以使用protected

答案 1 :(得分:0)

当你调用parent :: save()时,你正在调用DataStore_Adapter的save()方法,因此私有属性$ id对save()是可见的,因为它们都属于同一个类

答案 2 :(得分:0)

您可以阅读有关私人和其他关键字here.

的更多信息