php中子类扩充父类同名的属性

今天在使用tp开发的过程中碰到这样一个需求,很多模型有共有的属性,例如:一些表单字段的自动验证,这些表单不止在单个模块中出现,其他模块也很常见。能不能在一个model的基类中写这些共有字段的验证,然后不同的模型再自己去扩充呢?
经过尝试,找到下面的解决方法,demo示例如下:

<?php
class A
{
    protected $arr = ['11','22','33'];
}

class B extends A
{
    //protected $arr;  

    public function __construct()
    {
        $this->arr = array_merge($this->arr, ['aa','bb','cc']);
    }   

    public function test()
    {
        print_r($this->arr);
    }
}
$b = new B();
$b->test();

//结果
Array
(
    [0] => 11
    [1] => 22
    [2] => 33
    [3] => aa
    [4] => bb
    [5] => cc
)

B类继承了A类,在B类的构造函数中调用了类属性$arr,这时会访问到A类中的$arr属性值,然后再使用array_merge函数,合并父类属性和子类中新的属性,再赋给子类的$arr属性。
注意:虽然一般而言,访问类属性时需要在提前声明,但是在这里的B类中不能声明,因为声明之后,在构造函数中调用的就是子类的属性了。

posted @ 2017-08-20 19:50  蚁象  阅读(183)  评论(0编辑  收藏  举报