面向对象第二天
面向对象三大特性之一
第二天 封装性
============================================
1、封装性
1.1 定义
将类的成员(方法和属性)用修饰符设置成非公有(private protected)
作用:
实现对成员的访问控制
1.2 对成员方法的封装
将成员方法设置为非公有
特点:
① 被非公有化的方法不能在类的外部直接访问
② 在类的公共方法中使用$this访问
1.3 对成员属性的封装(真封装)
将成员属性设置为非公有
特点:
① 在类的外部不能直接访问或修改
② 在类的内部用$this操作
作用:
实现对成员属性的访问控制
2、访问私有成员
2.1 通过公共方法访问私有成员
给每一个非公有属性,准备两个公共方法
缺点:
属性较多时,方法也多
2.2 与封装相关的魔术方法4个
2.2.1 自动获取非公有属性
__get()
触发条件:
当对象在类的外部访问非公有或不存在的属性时自动调用
参数:
@param $param 访问的属性名
格式:
public function __get($param)
{
return $this->$param;
}
__set()
触发条件:
当对象在类的外部设置非公有或不存在的属性时自动调用
参数:
@param $param 设置的属性名
@param $value 设置的属性值
格式:
public function __set($param,$value)
{
$this->$param = $value;
}
__isset()
触发条件:
当对象外部用isset或empty判断成员属性时自动触发
参数:
@param $param 判断的属性名
格式:
public function __isset($param)
{
return isset($this->$param);
}
注意:empty判断时 需要 __get配合提高判断准确性
__unset()
触发条件:
当对象外部用unset销毁成员属性时自动触发
参数:
@param $param 销毁的属性名
格式:
public function __unset($param)
{
unset($this->$param);
}