条件是否应该在函数/方法的内部或外部

Pee*_*rBr 8 php

什么是可取的:一个函数,决定它是否应该做任何事情,或决定是否调用该函数?

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!");
}
Run Code Online (Sandbox Code Playgroud)

要么

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!");
    }
}
Run Code Online (Sandbox Code Playgroud)

该示例很简单,但想象一下使用配置或访问权限启用功能.有接受的标准吗?我的直觉告诉我,y()exit()涉及到某些事情时会去,打破正常流动.否则,封装和DRY会有利x().你怎么看?

编辑我已经花了这个例子.我的问题是:如果存在一个应该执行函数/方法的条件,那么该控制是否应该在函数中发生(整齐但结果是不确定的)或者在它之外(调用是冗长的,但预期输出总是相同的) )?

Ben*_*Ben 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!"
Run Code Online (Sandbox Code Playgroud)

一般来说:为什么不使用类?

如果您有访问权限或配置,则此信息可以存储在数组或对象中。因此,您可以遍历数组或搜索关键字,然后处理应该处理的内容。IE。进行函数调用。

function lockStoreOnDay()
{
    //do locking
    return "Sorry, we are closed!";
}

$config_closeOnDay = array (
    'Sunday'
);

foreach ($config_closeOnDay as $dayToCloseOn) {
    echo lockStoreOnDay();
}
Run Code Online (Sandbox Code Playgroud)

也许这有帮助。