单一退货声明与多个?

Hai*_*ood 5 php optimization return

我经常被告知我不应该使用多个返回点,而应该只使用一个:

以此为例;

function data($item){
    switch($item){
        case 'one':
            return 1;
        case 'two':
            return 2;
        case 'three':
            return 3;
        case 'different_type':
            return 'Something Different';
        default:
            return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,更好的写作方式是:

function data($item){
    $value = false;
    switch($item){
        case 'one':
            $value = 1;
            break;
        case 'two':
            $value = 2;
            break;
        case 'three':
            $value = 3;
            break;
        case 'different_type':
            $value =  'Something Different';
            break;
        default:
            $value = false;
    }
    return $value;
}
Run Code Online (Sandbox Code Playgroud)

是否有任何理由不是一个优先于另一个?

我想第二个给出一些IDE更好的机会来暗示返回值?但这里也存在性能问题吗?

hak*_*kre 5

是否有任何理由不是一个优先于另一个?

有时但这取决于具体的代码.

我想第二个给出一些IDE更好的机会来暗示返回值?

不,通常情况并非如此.

但这里也存在性能问题吗?

早期返回可以在代码中缩短较长的路径,因此可以带来好处.

一个好的编码指南现在通常不会严格控制这种情况,在早期,语言不灵活,保持严格的方法可能是有意义的(函数的最后一行必须是单个返回命令).

现在众所周知,降低环状复杂性更为重要,这通常是早期返回的情况.但是,如果你早点回来,那就不是这样了,这种情况自然会发生.


当你在谈论代码时,第一个例子应该出现在我的眼中:

function data($item) {

    static $map = [
        'one'   => 1,
        'two'   => 2,
        'three' => 3,
        'different_type'
                => 'Something Different',
    ];

    # return @$map[$item] ?: false;
    return isset($map[$item])
        ? $map[$item] 
        : false
        ; 
}
Run Code Online (Sandbox Code Playgroud)

但这也会违背你的榜样.