使用PHP的if语句

在PHP中有if语句。然而,依赖别人编写的代码是愚蠢的。我们应该自己去实现。

换句话说,理想的情况是这样的。

echo $if($true, 'foo', 'bar');
// => 'foo'

echo $if($false, 'foo', 'bar');
// => 'bar'

函数具有能力。利用这种能力,你应该能够实现自己使用的$true和$false。

$true  = function (...) { return ...; };
$false = function (...) { return ...; };

$if = function ($cond, $then, $else) {
    return ...;
};

如果 $cond 为操作数,则 $if 接受 $then 和 $else 作为操作数。

从实用的角度来看,如果我们进一步定义以下函数,那将会非常方便。

$eq = function ($a, $b) use ($true, $false) {
    return ($a === $b) ? $true : $false;
};

echo $if($eq(10, 20), 'equals!', 'not equals');

而且还可以轻松地实现以下这样的逻辑运算。

$not = function ($v) use ($true, $false) {
    return $v($false, $true);
};

$and = function ($x, $y) use ($false) {
    return $x($y, $false);
};

$or = function ($x, $y) use ($true) {
    return $x($true, $y);
};

var_dump(
    $if($and($eq(10, 10),
             $eq(10, 20)),
        'TruE',
        'FalsE'));

什么?这样的话就没法相互操作了,很不方便?没办法,难道不可以提供一个函数将我的自定义布尔类型转换为PHP的bool类型吗?

$PHPBool = function ($bool) use ($if) {
    return $if($bool, true, false);
};


if ($PHPBool($eq(10, 99))) {
    var_dump("foo");
} else {
    var_dump("bar");
}

后记

内容和以下的文章几乎一样。本来以为能避免重复,但由于放置了一周未写完而被别人抢先了,真是有点不爽。

Re: if文も三項演算子も書かないで条件分岐をスッキリさせる – Qiita by @irxground

PHP – if文も三項演算子も書かないで条件分岐をスッキリさせる – Qiita by @t_ishida

稍微详细地写一下,这是相当于无类型λ演算的基础。关于这个问题,我们之前已经写过了。两篇文章都很短,如果您感兴趣的话,可以参考一下。

    • DT戦記 – Pythonでラムダ計算

 

    DT戦記 – 【DT閑話】童貞プログラマが函数型言語(とラムダ計算)を理解してみる【初心者向け解説】

如果在代代木附近或其他地方看见有人说:“喂,这是怎么回事啊?”我们应该去追问他。

广告
将在 10 秒后关闭
bannerAds