引入参数对象

未匹配的标注

重构动机

如果一组数据项总是一同出现在一个又一个函数中,那么这组数据项就是数据泥团。
我们可以将数据项组织成结构,这会让数据项之间的关系变得清晰,而且使用新的数据结构,函数的参数列表也能缩短。
数据项除了可以组织成数据结构,也可以使用类组织起来,然后传入对象。

重构前

<?php

namespace app\controller;

class Index
{
    /**
     * @var array 值日表
     */
    protected $studentsDutyTable = [
        '一年级' => [
            '1班' => ['星期一' => '小和', '星期二' => '小梧'],
            '2班' => ['星期一' => '小晓', '星期二' => '小流']
        ],
        '二年级' => [
            '1班' => ['星期一' => '小A', '星期二' => '小B'],
            '2班' => ['星期一' => '小C', '星期二' => '小D']
        ]
    ];


    /**
     * 输出今天值日生的姓名
     */
    public function theStudentOnDutyToday()
    {
        $name = $this->getStudentDutyTable('一年级', '2班', '星期二');
        echo "今天的值日生是" . $name;
    }


    /**
     * 获取今天值日的学生姓名
     */
    public function getStudentDutyTable($grade, $class, $today)
    {
        return $this->studentsDutyTable[$grade][$class][$today];
    }
}

重构后

<?php

namespace app\controller;

class Index
{
    /**
     * @var array 学生名字数组
     */
    protected $studentsDutyTable = [
        '一年级' => [
            '1班' => ['星期一' => '小和', '星期二' => '小梧'],
            '2班' => ['星期一' => '小晓', '星期二' => '小流']
        ],
        '二年级' => [
            '1班' => ['星期一' => '小A', '星期二' => '小B'],
            '2班' => ['星期一' => '小C', '星期二' => '小D']
        ]
    ];


    /**
     * 输出今天值日生的姓名
     */
    public function theStudentOnDutyToday()
    {
        $duty = ['grade' => '一年级', 'class' => '2班', 'today' => '星期二'];
        $name = $this->getStudentDutyTable($duty);
        echo "今天的值日生是" . $name;
    }


    /**
     * 获取今天值日的学生姓名
     */
    public function getStudentDutyTable($duty)
    {
        return $this->studentsDutyTable[$duty['grade']][$duty['class']][$duty['today']];
    }
}

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

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


暂无话题~