一、封装的特性
1.对象的属性或方法加上修饰符
2.尽可能隐藏内部细节
3.访问控制
4.PHP5特性
5.修饰符种类:public/private/protected/var
二、修饰符
1.private:
a.私有性封装,外部不能调用,内部其他成员可以,用于为其他方法铺路的方法,不露出接口。
b.构造、析构方法一般不封装。
c.属性私有化是最常见的,私有化后,可用相应的方法将改变属性的行为暴露出来,并限制在可控范围内
class Person {
private $name="wo";
function setName($str){
if($str==="ni")
$this->name=$str;
}
function getName(){
echo $this->name;
}
};
三、魔术方法
新版本不能对魔术方法进行私有封装,魔术方法对private/protected属性有效
1.__get($pro);
直接访问私有属性时自动调用,属性名传给$pro,如下:
class Person {
private $name="wo";
private $age=11;
private $sex="nan";
function __get($pro){
return $pro;
}
};
$p1=new Person();
echo $p1->name;
echo $p1->age;
echo $p1->sex;
//都是############
class Person {
private $name="wo";
private $age=11;
private $sex="nan";
function __get($pro){
return $this->$pro;
}
};
$p1=new Person();
echo $p1->name;
echo $p1->age;
echo $p1->sex;
//wo11nan
2.__set($name,$value);
直接设置私有属性时自动调用,赋予属性名$name为$value值,如下:
class Person {
private $name="wo";
private $age=11;
private $sex="nan";
function __get($pro){
return $this->$pro;
}
function __set($pro,$value){
//限制外部修改条件
if($pro==="name"){
if($value==="nii"){
$this->$pro=$value;
}
}else{
return false;
}
}
};
$p1=new Person();
$p1->name="nii";
echo $p1->name;
//nii
3.__isset($name);
类内部添加__isset()方法时,私有属性不能用isset判断,添加后,外部使用isset如遇私有属性,自动调用对象内的__isset();,参数是属性名,如下:
class Person {
private $name="wo";
private $age=11;
private $sex="nan";
function __get($pro){
return $this->$pro;
}
function __set($pro,$value){
if($pro==="name"){
if($value==="nii"){
$this->$pro=$value;
}
}else{
return false;
}
}
function __isset($pro){
return $pro;
}
};
$p1=new Person();
if(isset($p1->name)){
echo "属性存在";
}else{
echo "属性不存在";
}
//属性存在
4.__unset();
同上
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。