PHP使类属性可继承

时间:2010-09-30 13:16:24

标签: php class inheritance properties

我有2个A和B类扩展A. A有一个公共属性,我希望在B的实例上无法访问属性。我试着更好地解释一下:

class A
{
    public $prop;
}
class B extends A
{
    ...
}
$instance=new B;
$instance->prop; //This must throw an error like "Undefined property prop"

我尝试使用final关键字,但它仅适用于不属于属性的方法。我还尝试在B上设置与private相同的属性,但PHP不允许将访问级别从公共更改为私有或受保护。

也许有一个简单的解决方案来解决这个问题,但我找不到它,所以你知道这样做的方法吗?

3 个答案:

答案 0 :(得分:3)

只需将public $prop;更改为private $prop;即可将{prop public改为通过各种可能的方式使其可访问,但将其设为private会使其在类中可访问仅

答案 1 :(得分:1)

嗯。棘手!

我想到的唯一想法是从一开始就将$prop设为私有,并使用magic getter and setter functions来控制访问权限。您必须将访问信息存储在单独的数组中,然后返回正确的值,或在getter函数中抛出致命错误。

答案 2 :(得分:1)

使用magic methods

class A {
    protected $_prop;
    public function __get($key) {   
        if ($key=='prop') {
            return $this->_prop;
        }
    }

    public function __set($key, $value) {
        if ($key=='prop') {
            return $this->_prop = $value;
        }
    }
}

class B extends A {
    public function __get($key) {
    }

    public function __set($key, $value) {
    }

    // how you can use it
    public function foo() {
        echo $this->_prop;
    }
}