封装记录

未匹配的标注

重构动机

记录型结构(例如{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);
    }
}

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~