面向对象的三大特性
//面向对象的三大特性:①封装②继承③多态
//运用封装方法复杂很多但还使用其目的是:为了控制用户的输入或者用户的取值,让类更加的安全。
//做法:
// 1.将成员变量变为私有(将类里面的public改为private,使外界访问不到,增加了其安全性。)
// 2.做一个成员方法来间接访问类里面的变量。(运用function setAge()来访问或者赋值给成员变量age。)
// 3.在该方法里面加限制条件。
1.
class Ren
{
private $age; //18-50之间。
function setAge($n) //通过用这个setAge()方法来可以给$age访问并且赋值。
{
if($n>=18 && $n<=50)
{
$this->age=$n;
}
}
function getAge() //若从外界要调用getAge()就可以获取$age的值了。
{
return $this->age; //返回成员变量age的值
}
}
$r= new Ren(); //从Ren类里面造一个对象$r
$r->setAge("20"); //给成员变量age赋值20
echo $r->getAge(); //调用getAge方法并且输出age的值
2.
class Ren
{
private $age; //18-50之间
private $name;
//魔术方法,给变量赋值。
function __set($n,$v) //定义一个set方法,参数$n得是一个变量,$v得是一个值。
{
if($n=="age") //加限制,给的$n这个变量如果是$age需要再判断$v是否在18到50之间都满足的话给age赋值,若不满足直接赋值。
{
if($v>=18 && $v<=50)
{
$this->$n = $v;
}
}
else
{
$this->$n = $v; //给变量$n赋值为$v
}
}
}
//魔术方法,取变量值。
function __get($n) //定义一个__get方法来获取类里面的成员变量。括号内的参数$n为一个变量。
{
return $this->$n;
}
$r= new Ren(); //从Ren类里面造一个对象$r
$r->__set("age",20); //用造的$r这个对象调用类里面的__set方法,再给age这个成员变量赋值20
var_dump($r); //最后输出一下这个对象$r
echo $r->$name; //输出造的对象$r调用一下成员变量name的值,就可以自动直接调用这个__get方法了,它把$name当做参数传到__get方法里面,返回类里面的name值直接使用了
//定义了__set方法的好处:没写__set方法前类里面的成员变量是private的,外界不能访问也就是用以前的$r->age=20;命令按理说不能执行访问并且赋值,但因为在类里面定义了__set方法,所以从外界用以前的$r->age=20命令可以访问并且赋值。
//用__set方法的好处:①通过一个__set方法就可以给类里面多个不同的成员变量赋值或者访问②访问方式跟没用封装之前的访问方式一样没有变。③当别人使用这个类时,还是使用的没有封装前的访问方式进行访问,这样别人就不知道这个类有没有被封装,用来迷惑对方。
//__get和__set方法一般用来在封装里面使用。