封装
把成员方法和成员属性封装到类中,隐藏属性和方法实现的细节,通过public、protected、private等限定类成员的访问权限,数据被保护在内部,只通过被授权的成员方法才可以操作,尽可能的对成员进行封装。
public:方法或者属性在任何作用域下都可以访问到,而且是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public。
protected:本类和子类可以访问,外部对象不可以调用。
private:只能在本类访问,子类与外部对象都不可能调用。经过private标记的方法或者属性可以在继承类中重新定义,每一个类只能看到它自己定义的私有方法。
这三个修饰符从作用范围上来讲应该像这样从大到小排序:public→protected→private之所以说是在作用范围上,是因为类把一些属性和方法进行了封装,这个封装就决定了数据的“可见性”,这样我们在类的外面不能够随意修改所定义的属性和方法而只能够进行调用,这就是封装的好处,同时也提高了安全性。
目的:为了使一个类更加安全
做法:
1.将成员变量变为私有的
2.在类里面做方法来间接访问成员变量
3.在方法里面加控制
封装函数:
__set()方法:这个方法用来为私有成员属性设置值的, 有两个参数,第一个参数为你要为设置值的属性名,第二个参数是要给属性设置的值,没有返回值。
function __set($n,$v) //设置只有年龄在18到50之间才可导入 { if($n=="age") { if($v>18 && $v<50) { $this->$n = $v; } } else { $this->$n = $v; } }
__get()方法:这个方法用来获取私有成员属性值的,有一个参数, 参数传入你要获取的成员属性的名称,返回获取的属性值, 这个方法不用我们手工的去调用, 是在直接获取私有属性的时候自动调用的。
//__get魔术方法,用来取变量值的 function __get($n) { return $this->$n; }
实例:
class Ren { public $code; //人员代号 private $name; //人员名称 private $sex; //人员性别 private $age; //人员年龄,必须在18-50周岁之间 //构造方法,用来初始化性别 function __construct($s) { $this->sex = $s; } //给变量赋值的魔术方法 function __set($n,$v) { if($n=="age") { if($v>18 && $v<50) { $this->$n = $v; } } else { $this->$n = $v; } } //__get魔术方法,用来取变量值的 function __get($n) { return $this->$n; } } //造对象 $r = new Ren("男"); $r->age = 30; //自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数 $r->name = "张三"; echo $r->sex; //自动调用__get()方法,将变量名当做参数 var_dump($r);
结果:
连续调用:
class Dog { private $name; function Jiao() { echo $this->name."在叫"; } function SetName($n) { $this->name = $n; return $this; //return返回这个对象 } } $d = new Dog(); $d->SetName("旺财")->Jiao();
结果: