вернуть переменную в операторе if - возможны ли многочисленные попытки? - PullRequest
1 голос
/ 12 августа 2011

Я не уверен, что я правильно назвал это, но я думаю, что следующий код будет довольно понятен:

function a($p){
    if($p===true){
        return 'yep';
    }
    else{
        return false;
    }
}

if($test=a(true)){
    echo $test; // this will echo out 'yep'
}

приведенный выше код работает как ожидалось.то, что я пытаюсь сделать, это что-то вроде этого:

function a($p){
    if($p===true){
        return 'yep';
    }
    else{
        return false;
    }
}

if($test=a(false)||$test=a(true)){
    var_dump($test); // this will show $test being bool(true) NOT yep
}

это возможно без выполнения промежуточной функции?

я также пытался:безрезультатно.

1 Ответ

4 голосов
/ 12 августа 2011
$test = a(false) || $test = a(true)

будет оцениваться как

$test = ( a(false) || $test=a(true) )

Логические операторы всегда возвращают логическое значение, поэтому результат выражения || будет присвоен $test.

Если вы хотите, чтобы приведенные выше выражения присваивали строку $test, тогда вы должны использовать or, который имеет более низкий приоритет , чем оператор присваивания (я бы предпочел этот способ в этом контексте) :

$test = a(false) or $test = a(true)

DEMO

Или вы правильно поставили круглые скобки:

($test = a(false)) || ($test = a(true))
...