以PHP 4为例,查看以下函数的签名mktime()
:
int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
你不觉得那令人困惑吗?该函数称为“ make time”,但它需要使用日,月和年参数以及三个时间参数。记住他们要执行的顺序有多容易?如果看到了mktime(1, 2, 3, 4, 5, 2246);
怎么办?您能理解而不必参考其他内容吗?被2246
解释为24小时制的“ 22:46”?其他参数是什么意思?作为一个对象会更好。
转到PHP 5,现在有一个DateTime对象。其方法中有两个称为setDate()
和setTime()
。它们的签名如下:
public DateTime setDate ( int $year , int $month , int $day )
public DateTime setTime ( int $hour , int $minute [, int $second = 0 ] )
您仍然必须记住,参数的顺序从最大到最小,但是这是一个很大的改进。请注意,没有一个方法可以一次设置所有六个参数。您必须进行两个单独的调用才能执行此操作。
鲍伯叔叔在谈论的是避免使用扁平结构。相关的参数应该组合到一个对象中,如果您有三个以上的参数,则很可能在其中有一个伪对象,这使您有机会创建适当的对象以实现更大的分离。虽然PHP不具有单独的Date
和Time
类,你可以认为DateTime
确实包含Date
对象和Time
对象。
您可能具有以下结构:
<?php
$my_date = new Date;
$my_date->setDay(5);
$my_date->setMonth(4);
$my_date->setYear(2246);
$my_time = new Time;
$my_time->setHour(1);
$my_time->setMinute(2);
$my_time->setSecond(3);
$my_date_time = new DateTime;
$my_date_time->setTime($my_time);
$my_date_time->setDate($my_date);
?>
是否必须每次设置两个或三个参数?如果您只想更改小时或日期,现在很容易做到。是的,需要验证对象以确保每个参数都能与其他参数一起使用,但是无论如何都是如此。
最重要的是,它是否易于理解并因此得以维护?底部的代码块比单个mktime()
函数大,但是我认为这更容易理解。即使是非程序员,也不会很费力地确定其功能。目标并不总是较短的代码或更聪明的代码,而是更具可维护性的代码。
哦,不要使用全局变量!
postLetter(string country, string town, string postcode, string streetAddress, int appartmentNumber, string careOf)
的臭味的建议postLetter(Address address)
。继续阅读这本书,希望它能说出类似的话。