本着看到Short-circuit evaluation like Python's "and" while storing results of checks的精神,我決定了解如何在PHP中最好地解決這個問題,但遇到了一個問題。在if()塊中分配多個變量時意外的行爲
意外
<?php
function check_a()
{
return 'A';
}
function check_b()
{
return 'B';
}
function check_c()
{
return 'C';
}
if($a = check_a() && $b = check_b() && $c = check_c())
{
var_dump($a);
var_dump($b);
var_dump($c);
}
結果:
bool(true)
bool(true)
string(1) "C"
代碼,我想要的東西發生
<?php
function check_a()
{
return 'A';
}
function check_b()
{
return 'B';
}
function check_c()
{
return 'C';
}
// if(($a = check_a()) && ($b = check_b()) && $c = check_c()) // equivalent to line below
if(($a = check_a()) && ($b = check_b()) && ($c = check_c()))
{
var_dump($a);
var_dump($b);
var_dump($c);
}
個
結果:
string(1) "A"
string(1) "B"
string(1) "C"
爲什麼以這種方式意外例如行爲?
你確實意識到你正在分配而不是比較。 –
@ Fred-ii- - 這不就是他們想要做的事情嗎? – Quentin
@Quentin我....呃....猜*大聲笑*。我的錯。 –