<?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);