基类
class UserController extends Controller {
public $userId = null;
public function init() {
parent::init();
$this->userId = 11111111;
}
//注意action不要掉
public function beforeAction($action) {
if (empty($this->userId)) {
return FALSE;
}
return TRUE;
}
}
继承的时候不要忘了parent方法
class UserAjaxBaseController extends UserController {
public function init() {
$this->responseData = array(
'success' => false,
'msg' => '',
'errorCode' => self::ILLEGALITY,
'data' => array(),
);
parent::init();
}
public function beforeAction($action) {
//如果没有用户ID 或者 不是ajax请求过来的,拒绝,本地调试的时候可以去掉ajax校验
if (!parent::beforeAction($action) || !Yii::app()->request->isAjaxRequest) {
$this->response();
return FALSE;
}
//reffer验证 $_SERVER["HTTP_REFFER"]
//是否是ajax请求
return TRUE;
}
继承,可以使用父类的方法,也可以子类里面重新实现父类的方法。
搜索,如果子类中没有这个属性或者方法,说明是来自其父类的。
构造方法的继承也是一样的,注意父类的方法不要随意变更,也不要修改层次结构等问题,不然会引起bug。
//继承了父类的属性,并且新增了一个自己的属性
function __construct($a,$b,$c){
parent::__construct($a,$b);
$this->c = $c;
echo 111;
}
注意 parent关键字,parent关键字可以在任何覆写父类方法的方法中使用。覆写父类方法表示不希望删除父类的功能,而是扩展它。
(利用已经存在的功能,而不是重新开发)
public private protected 决定了类的访问控制(管理)。
为了保证数据,防止被外面调用时破坏,一般使用 private做类属性的关键字。
而get和set方法为public,作为赋值和取值方法,通常为public的。
借助类型提示和访问控制可以更好的控制类的接口。