什么是可取的:一个函数,决定它是否应该做任何事情,或决定是否调用该函数?
function x() {
if ($userIsLoggedIn) {
alwaysHelloUser();
}
if ($visitorRegion != 'US') {
alwaysDisplayNoInternationalShipping();
}
if ($day == 'Sunday') {
alwaysLockDownStore();
}
}
function alwaysLockDownStore() {
//close store
//offer alternative store
//show opening hours
//display form for user leaving order for next day
exit("Sorry, we are closed!");
}
或
function y() {
perhapsSayHelloUser($user);
maybeDisplayNoInternationalShipping($region);
sometimesLockDownStore($day);
}
function sometimesLockDownStore($day) {
if ($day == 'Sunday') {
//close store
//offer alternative store
//show opening hours
//display form for user leaving order for next day
exit ("Sorry, we are closed!");
}
}
该示例很简单,但想象一下使用配置或访问权限启用功能。有接受的标准吗?当我遇到类似y()
的东西时,我的直觉告诉我去exit()
,打破正常的流程。否则,封装和DRY会支持x()
。你觉得怎么样?
编辑我已经花了这个例子。我的问题是:如果存在一个应该执行函数/方法的条件,那么该控制是否应该在函数中发生(整齐但结果是不确定的)或者在它之外(调用是冗长的,但预期输出总是相同的) )?
答案 0 :(得分:2)
我更喜欢在功能中保留主要功能。外面的额外逻辑。因为该功能只会做出意图。或者你每次都会运行所需的功能。取决于您的问题的复杂程度。
function lockStoreOnDay($day) {
// do locking
return "Sorry, we are closed on $day!";
}
echo lockStoreOnDay('Sunday'); //will print "Sorry, we are closed on Sunday!"
echo lockStoreOnDay('Saturday'); //will print "Sorry, we are closed on Saturday!"
一般情况下:为什么不使用班级?
如果您具有访问权限或配置,则此信息可以存储在数组或对象中。因此,您遍历数组或搜索关键字,然后处理应处理的任何内容。 I. e。打个电话。
function lockStoreOnDay()
{
//do locking
return "Sorry, we are closed!";
}
$config_closeOnDay = array (
'Sunday'
);
foreach ($config_closeOnDay as $dayToCloseOn) {
echo lockStoreOnDay();
}
也许这有帮助。
答案 1 :(得分:1)
你不应该在函数内部对这些约束进行硬编码。你的目标应该是:
function isStoreLocked($dayToCheck, $daysLocked)
{
// You can replace "locking" logic with database or something
// There shouldn't be an raw array of days inside code
return in_array($dayToCheck, $daysLocked);
}
然后在你的代码中:
$curentDayName = date('l');
$lockedDays = array('Saturday', 'Sunday');
if(isStoreLocked($currentDayName, $daysLocked))
{
die('Sorry, store is locked!');
}
为我的答案提供上下文:如果你使用框架(我的选择是Symfony2),isStoreLocked
应该是服务或存储库方法,它应该在控制器内调用,同时返回Response(而不是简单) die()
)。