封装(面向对象特性之一)

实验  1

class  Ren        ----定义一个类

{

  private $name;     ----私有的成员

}

$r = new Ren();      ----造一个人

$r->name;    ----外部调用 name  输出报错(private特性)

实验  2

class Ren    ----定义一个类

{

  private $name;  ----私有成员

  function  setName($n)    ----在类内 做一个方法

  {

    $this->name = $n;  ----调用参数

  }

}

$r = new Ren();    ----造一个人

$r->setName("张三");  ----设置name值 为"张三"

var_dump($r);      ----输出成功

 可以通过在类内设置方法间接访问 private

实验  3

class Ren    ----定义一个类

{

  private $name;  ----私有成员

  function  setName($n)    ----在类内 做一个方法

  {

    $this->name = $n;  ----调用参数

  }

  function getName()    ----获取name值

  {

    return $this->name;  ----返回name的值

  }

}

$r = new Ren();    ----造一个人

$r->setName("张三");  ----设置name值 为"张三"

echo $r->getName();

输出结果为  张三

实验  4

class Ren    ----定义一个类

{

  private $age;  ----私有成员   假设age 18-50之间

  function  setAge($n)    ----在类内做一个方法,一般情况下为public公共属性,都可调用,随意                 更改,不可控

                 通过加逻辑语句控制类 使类更安全

                 

  {

    if($n>=18  &&  $n<=50)          **添加的逻辑语句

    {

    $this->Age = $n;  ----调用参数

    }

  }

  function getAge()    ----获取值

  {

    return $this->age;  ----返回age的值

  }

}

封装总结:

目的:为了使类更加安全

做法:

1、将成员变量变为私有  (实验2)

2、做一个成员方法来间接访问 (实验3)

3、在该方法里面加限制条件(实验4)

封装的基本方法:

function  setAge($n)    

  {

    if($n>=18  &&  $n<=50)          **添加的逻辑语句

    {

    $this->Age = $n;  ----调用参数

    }

  }

  function getAge()    ----获取值

  {

    return $this->age;  ----返回age的值

  }

类似与面向过程,针对性强。若面向对象数少时为不二选择,若面向对象数大时,代码量至少会翻倍(一个对象,写两个方法;两个,写四个;三个,写六个……)

魔术方法:给变量赋值

按常规方法

例:

function __set($n,$v)    ---拉取两个值 $n函数名,$v函数值

{

  if($n=="age")      ---如果$n是age

  {

    if($v>=18  &&  $v<=50)   ---如果$n的值$v 满足条件

    {

      $this->$n = $v;    ---调用这个函数$n , $n的值是$v

    }

  }

  else                ---其他的

  {

    $this->$n = $v;        ---直接赋值

  }

}

function __get($n)    ---直接写函数名

{

  return $this->$n;    ---返回函数值

}

总结:

魔术方法更适合封装。只需要拉取两个变量(函数名,函数值)按常规方式设置、返回 加约束条件即可。

魔术方法可无限次使用

原文地址:https://www.cnblogs.com/zhangbaobao/p/6727258.html