<?php //面向对象三大特性 //封装 //目的:让类更加安全,不让外界直接访问类里面的成员变量 //做法: //1.把成员变量、方法做成私有的 class Person { public $name; private $sex; private $age; function __construct($name="",$sex="男",$age=10) { $this->name=$name; $this->sex=$sex; $this->age=$age; } function run() { echo $this->name."在走路时,".$this->leftleg()."再".$this->rightleg(); } private function leftleg() { return "迈左腿"; } private function rightleg() { return "迈右腿"; } } $p=new Person("张三"); var_dump($p); echo $p->name."<br>"; //echo $p->sex."<br>"; //属性被封装,无法在类外面被调用 //echo $p->age."<br>"; //属性被封装,无法在类外面被调用 //echo $p->leftleg(); //属性被封装,无法在类外面被调用 //echo $p->rightleg(); //属性被封装,无法在类外面被调用 echo $p->run(); //2.做一个方法来实现变量取值或赋值,在方法里面加限制条件 class Person { public $name; private $sex; private $age; function __construct($name="",$sex="男",$age=10) { $this->name=$name; $this->sex=$sex; $this->age=$age; } //普通方法 只能给某一个属性进行赋值和取值 function setage($a) //给age赋值的函数 { if($a>1&&$a<50) { $this->age=$a; } } function getage() //取age值的函数 { return $this->age; } //魔术方法 可以给任何一种属性进行赋值和取值 function __set($n,$v) //给类里的私有成员赋值:$n代表属性名,$v代表属性值,$this->$n=$v { if($n=="age") { if($v>1&&$v<50) { $this->$n=$v; } } else { $this->$n=$v; } } function __get($n) //取类里的私有成员属性的值,$this->$n { return $this->$n; } } $p=new Person("李四","女",25); var_dump($p); //普通方法: echo "赋值年龄".$p->setage(40)."<br>"; echo "取值年龄".$p->getage(); var_dump($p); //魔术方法 echo "赋值性别".$p->sex="人妖"."<br>"; echo "取值性别".$p->sex; var_dump($p);