封装记录
重构动机
记录型结构(例如{start:1, end:5}
)是多数编程提供的一种常见特性。它们能直观地组织起存在关联的数据,将数据作为单元传递,而不是一堆数据的拼凑。但是如果记录中存在可变的数据,我们可以将其封装到对象,并为可变数据提供对应的方法。
重构前
下面代码实现的功能:对姓名与手机号码的敏感信息替换成“*”
<?php
namespace app\controller;
class Test
{
/**
* @var null 记录型数据
*/
public $organization = null;
/**
* 对姓名与手机号码做处理
*/
public function index ()
{
$name = mb_substr($_REQUEST['name'],0,1) . "**";
$mobile_num = substr_replace($_REQUEST['mobile_num'],'********',3);
$this->organization = ['name' => $name, 'mobile_num' => $mobile_num];
var_export($this->organization);
}
}
重构后
将name 和 mobile_num 提取到类中,并为其获取提供方法。
<?php
namespace app\controller;
/**
* Class Person
* 将可变数据归到类中,并为其获取提供方法。
*
* @package app\controller
*/
class Person
{
private $name;
private $mobile_num;
public function __construct ($name, $mobile_num)
{
$this->name = $name;
$this->mobile_num = $mobile_num;
}
public function getName ()
{
return mb_substr($_REQUEST['name'], 0, 1) . "**";
}
public function getMobileNum ()
{
return substr_replace($_REQUEST['mobile_num'], '********', 3);
}
}
<?php
namespace app\controller;
class Test
{
/**
* 记录型数据
*
* @var null
*/
public $organization = null;
/**
* 对姓名与手机号码做处理
*/
public function index ()
{
$person = new Person($_REQUEST['name'], $_REQUEST['mobile_num']);
$name = $person->getName();
$mobile_num = $person->getMobileNum();
$this->organization = ['name' => $name, 'mobile_num' => $mobile_num];
var_export($this->organization);
}
}
推荐文章: