使用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閑話】童貞プログラマが函数型言語(とラムダ計算)を理解してみる【初心者向け解説】
如果在代代木附近或其他地方看见有人说:“喂,这是怎么回事啊?”我们应该去追问他。