封装

复制代码
<?php
//封装
//目的:为了使一个类更加安全
/*class Ren
{
    public $code;//人员代号
    public $name;//人员名称
    private $sex;//人员性别
    public $age;//人员年龄.2,人员条件年龄必须在18-50岁之间
    
    //构架方法,用来初始化性别
    function __construct($s)//传一个性别参数 
    {
        $this->sex = $s;//变量接受性别参数
    }

}
//2造对象
$r = new Ren("男");
$r->age = 100;//年龄

var_dump($r);*/




/*//做法:
//1.将成员变量变为私有的
//2.在类里面做方法来间接访问成员变量
//3.在方法里面加控制
class Ren
{
    public $code;//人员代号
    public $name;//人员名称
    public $sex;//人员性别
    private $age;//人员年龄.2,人员条件年龄必须在18-50岁之间
    
    //构架方法,用来初始化性别
    function __construct($s)//传一个性别参数 
    {
        $this->sex = $s;//变量接受性别参数
    }
    //造一个修改年龄的方法
    function SetAge($a)//function它在外界可以访问。SetAge名字。($a)给的值
    {
        //加个控制年龄大于18小于50
        if($a>18 && $a<50)
        {
            $this->age = $a;
        }
        
    }
    //造一个获取age值的方法
    function GetAge()
    {
        return $this->age;
    }
}
*/



//3简单的魔术方法
/*class Ren
{
    public $code;//人员代号
    private $name;//人员名称
    public $sex;//人员性别
    private $age;//人员年龄
    
    //构架方法,用来初始化性别
    function __construct($s)
    {
        $this->sex = $s;
    }
    
    
    //用面向对象做  遇到这个类————set魔术方法解决的方案1先看看有没有限制条件,里头的类
    //给变量赋值的魔术方法,提到魔术方法都是双下划线打头————set
    function __set($n,$v)//这个方法里面需要两个参数1变量名称2变量值($name,$value)这是形参必须给2个值
    {
        if($n=="age")//判断变量名age
        {
            if($v>18 && $v<50)//age限制条件
            {
                $this->$n = $v;//满足上面条件走这条
            }
        }
        else//不等于age就是没有限制条件
        {
            $this->$n = $v;//没有限制条件走这条
        }
    }
}    
    
    

//2造对象
$r = new Ren("男");
//$r->SetAge(30);
//$r->__set("age",30);
$r->age = 49;//自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数.
//$r->name = "张三";//名称那加private要是没有魔术方法提示汇报错误,有魔术方法就不会错误
var_dump($r);//输出
*/



class Ren
{
    public $code;//人员代号
    private $name;//人员名称
    private $sex;//人员性别
    private $age;//人员年龄
    
    //构架方法,用来初始化性别
    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;//没有封装的写法调出最上面的男
var_dump($r);

?>
复制代码
原文地址:https://www.cnblogs.com/xieyulin/p/7070364.html