Существует ли короткое замыкание ИЛИ в PHP, который возвращает крайнее левое значение?

Groovy имеет доступ к JRE:

System.err.println "goes to stderr"

, Хотя может быть больше Groovy-fied путь...

21
задан chaos 9 October 2009 в 01:55
поделиться

5 ответов

Вы можете использовать только:

$a = func1() or $a = func2() or $a = func3();

или я что-то упустил?

9
ответ дан 29 November 2019 в 20:35
поделиться

Нет, нет, и это, на мой взгляд, одно из плохих решений, принятых Расмусом Лердорфом при разработке PHP, которое большинство затрудняет компетентных разработчиков ради того, чтобы баловать некомпетентных.

Править : В PHP 5.3 и выше вы можете написать $ a = $ b?: $ C и даже $ a = $ b?: $ C?: $ D . Все еще не так хорошо, как логические операторы без повреждения мозга, но это что-то.

28
ответ дан 29 November 2019 в 20:35
поделиться

А как насчет функций переменных?

function coalesce($funcs)
{
    foreach ($funcs as $func)
    {
        //Catch language constructs
        switch($func)
        {
            case 'die':
                die();
        }
        $result = $func();
        if ($result)
        {
            return $result;
        }
    }
}
1
ответ дан 29 November 2019 в 20:35
поделиться

Вы можете использовать какую-то функцию coalesce :

function coalesce() {
    foreach (func_get_args() as $arg) {
        if ($arg) {
            return $arg;
        }
    }
    return null;
}

$a = coalesce($a, $b) or die("no value");
2
ответ дан 29 November 2019 в 20:35
поделиться

Это должно работать:

$a = (($f1=func1()) ? $f1 : ($f2=func2()) ?  $f2 : func3()) );
0
ответ дан 29 November 2019 в 20:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: