单一出口原则的实现细节

<?php
declare(strict_types=1);
ini_set('display_errors', 'On');
ini_set('error_reporting', E_ALL);

// This function has 6 returns, which is more than the 3 allowed.
function func1(bool $c1, bool $c2, bool $c3, bool $c4, bool $c5): bool
{
    if ($c1) {
        echo 'Error: c1';
        return false;
    }

    if ($c2) {
        echo 'Error: c2';
        return false;
    }

    if ($c3) {
        echo 'Error: c3';
        return false;
    }

    if ($c4) {
        echo 'Error: c4';
        return false;
    }

    if ($c5) {
        echo 'Error: c5';
        return false;
    }

    echo '';
    return true;
}

function func2(bool $c1, bool $c2, bool $c3, bool $c4, bool $c5): bool
{
    $ok = true;
    $msg = '';

    if ($c1) {
        $msg = 'Error: c1';
        $ok = false;
    } elseif ($c2) {
        $msg = 'Error: c2';
        $ok = false;
    } elseif ($c3) {
        $msg = 'Error: c3';
        $ok = false;
    } elseif ($c4) {
        $msg = 'Error: c4';
        $ok = false;
    } elseif ($c5) {
        $msg = 'Error: c5';
        $ok = false;
    }

    echo $msg;
    return $ok;
}

$c1 = $_GET['c1'] ?? false;
$c2 = $_GET['c2'] ?? false;
$c3 = $_GET['c3'] ?? false;
$c4 = $_GET['c4'] ?? false;
$c5 = $_GET['c5'] ?? false;

$ok1 = func1($c1, $c2, $c3, $c4, $c5);
$ok2 = func2($c1, $c2, $c3, $c4, $c5);


//========== 说明 =====//
//1func2()既实现了单一出口,又避免了多层if-else嵌套使代码变得难以维护的问题。

Copyright © 2025 码农人生. All Rights Reserved