首页 > 代码库 > 封装(面向对象特性之一)
封装(面向对象特性之一)
实验 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; ---返回函数值
}
总结:
魔术方法更适合封装。只需要拉取两个变量(函数名,函数值)按常规方式设置、返回 加约束条件即可。
魔术方法可无限次使用
封装(面向对象特性之一)