//面向对象的三大特性:封装、继承、多态 //1、封装-使用private //目的:保证类的安全性,类的成员不能被直接访问 /*class ren { private $name; private $sex; private $age;//访问修饰符(public private protected) } $r=new ren(); var_dump($r);//访问不到任何内容,但不报错 echo $r;//访问报错,因echo不具备输出此对象的功能,echo只能输出具体内容, */ //访问方法--间接访问 //1.造成员方法来操作变量 /*class ren { private $name; private $sex; private $age; //赋值 public function setage($a) { if($a>16 && $a<30) { $this->age=$a; //echo $this->age; } } //取值 function getage() { return $this->age; } } $r=new ren(); $r->setage(20); echo $r->getage(); //每一个成员变量都需要写赋值和取值方法,比较麻烦,一般不用 */ //2.使用__set()/__get()方法 /*class ren { private $name; private $sex; private $age; //赋值 function __set($n,$v) { if($n=="age") { $this->$n=$v; //echo $this->$n; } else { $this->$n=$v; } } function __get($n) { return $this->$n; } } $r=new ren(); $r->age=10;//注意写法 $r->name="男"; echo $r->age;//注意写法 echo $r->name;*/ //构造函数---初始化变量,即在我创建对象的时候,成员变量的值就已经存在了,比如:在我创建这个人的时候,他的性别就已经存在了
//一般拿到一个面向对象先看构造函数
class ren { private $name; private $sex; private $age; function __construct($s,$n,$a) { $this->sex=$s; $this->name=$n; $this->age=$a; } } $r=new ren("男","huqun","25"); var_dump($r);
练习
设计一个类:包含$a,$b,求和的方法,求乘积的方法,可以对变量进行初始化,$a,$b必须大于0小于100。
class shu { private $a; private $b;
function sum() { echo $this->a+$this->b; } function ji() { echo $this->a*$this->b; } function __construct($a,$b) { $this->a=$a; $this->b=$b; } function __set($n,$v) { if($n=="a"||$n=="b") { if($v>0 and $v<100) { $this->$n=$v; } } else { $this->$n=$v; } } function __get($n) { return $this->$n; } } $r=new shu(5,5); $r->a=1; $r->b=5; echo $r->ji(); //var_dump($r); echo $r->b; echo $r->a;