php类继承 成员属性的值

manbudezhu 发布于 2016/06/29 09:13
阅读 286
收藏 0
PHP

Model类里有一个protected $table=null,构造函数里对他进行了初始化:this->table=!is_null($table)?$table:C('TABLE_NAME');

userModel继承了Model类

class UserModel extends Model{
//我直接写成下面的为啥,$table改变不了?

protected $table='user';

}

加载中
0
大树_
大树_
同学  昨天跟你说了了解下static 延迟绑定
大止刀口
大止刀口
回复 @大树_ : 确实是可以用于在非静态成员函数。不过这也和楼主要在子类里给父类定义的变量赋值没太大关系吧。
大树_
大树_
回复 @士止刀口 : 好好看看哦 掌握了事实依据再来反驳. http://php.net/manual/zh/language.oop5.late-static-bindings.php "也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用。"重点看这里
大止刀口
大止刀口
回复 @大树_ : 楼主要的是重新给一个成员变量赋值。static::function()这种形式,只是用于父类定义的函数里,调用自己定义的函数后,如果子类覆盖了function,父类能调用子类的function而已。而这些函数都是静态函数好吧。静态函数没有$this,你怎么给$this->table赋值?
大树_
大树_
回复 @士止刀口 : 延迟绑定和静态有关系?
大止刀口
大止刀口
这个变量不是静态的,static延迟不管用吧。而且这东西也不是单例。
下一页
0
manbudezhu
manbudezhu
用$this->table='user';可以改变 但是这个 只能放到函数里吧.怎么直接改变$table的值了
大止刀口
大止刀口
你还是老老实实在子类的构造函数调用父类的构造函数,传入初始值吧。毕竟 封装 就是为了避免你这么做的。你想通过直接在定义的地方赋值不现实,毕竟这个变量是在父类里定义的。
0
yiane
yiane
Model类里面用$table给$this->table赋值了,这两个是不同的变量啊。你子类的$this->table并不能作为子类函数里面的$table用
0
大止刀口
大止刀口

this->table=!is_null($table)?$table:C('TABLE_NAME');

这一句说明父类的构造函数应该是容许你调用parent::__construct时传递一个$table参数来为它初始化的,如果$table为null再利用C这个函数做默认初始化。

$table这个变量是由父类定义的,所以初始化应该在父类里进行。而且父类也提供了可传参的构造函数了吧。就这么不情缘写构造函数啊。。。。。。

0
s
shuizhuniurou

父类构造函数改成

$this->table = !is_null($this->table)?$this->table:C('TABLE_NAME');

返回顶部
顶部