hq金水

愿你是阳光,明媚不忧伤~
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

面向对象的三大特性之封装

Posted on 2016-06-06 14:22  hq金水  阅读(171)  评论(0编辑  收藏  举报
//面向对象的三大特性:封装、继承、多态

//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;