Можно ли связать операторы сравнения?

Я до сих пор не смог найти эту информацию в официальной документации по PHP или на этом сайте. Таким образом, это может означать, что я ищу по неправильным условиям или он не поддерживается. Что я ищу? Я опишу это...

Допустим, у меня есть следующие сравнения в PHP:

if (($a == $b) && ($b == $c))
    doSomething();
else
    doSomethingElse();

if (($d < $e) && ($e < $f))
    doSomething();
else
    doSomethingElse();

Есть ли в PHP какой-то синтаксис для объединения сравнений без явного И для двух разных сравнений? Например, возможно ли что-то вроде этого:

if ($a == $b == $c)
    doSomething();
else
    doSomethingElse();

if ($d < $e < $f)
    doSomething();
else
    doSomethingElse();

Обратите внимание, что я ищу синтаксическое сокращение в языке. Я знаю, что могу легко написать функцию для каждого из этих сцепленных сравнений, но это неуклюжий обходной путь и нежелательный. Например:

function chainedGreaterThan($args)
{
    for ($i = 0; $i < count($args) - 1; $i++)
        if ($args[$i] <= $args[$i + 1])
            return false;
    return true;
}

Технически это сработает, но не является синтаксическим сокращением, заданным языком.


person E.T.    schedule 25.02.2013    source источник
comment
не пробовал, но как бы ни был php грязный, он должен работать   -  person Soundz    schedule 25.02.2013
comment
Нет, но давайте, почему бы вам просто не использовать $d < $e && $e < $f? И, самое главное, что делать, когда пытаются сравнить результат $b == $c с $a?   -  person raina77ow    schedule 25.02.2013
comment
@ raina77ow Как насчет ($b == $c) == $a? Цепные операторы сравнения не такие уж и странные. Python и Perl 6 также поддерживают его, и эта нотация очень распространена в основах математики.   -  person Kevin    schedule 03.04.2014
comment
@Kevin Я категорически против использования скобок для увеличения значения оператора. Здесь ($b == $c) == $a будет означать одно — «сравните результат $b == $c с $a», а $b == $c == $a совсем другое.   -  person raina77ow    schedule 03.04.2014


Ответы (2)


Нет, в PHP нет ничего подобного.

person Dogbert    schedule 25.02.2013
comment
Извините, но я думаю, что ответ просто нет, должен быть комментарий, это лучше и выглядит профессионально. - person ; 25.02.2013
comment
Что ж, это отвечает на это. Спасибо! - person E.T.; 25.02.2013
comment
@ И.Т. на него ответили также выше (второй комментарий под вашим вопросом!) - person ; 25.02.2013
comment
Комментарии @Akam не являются ответами и поэтому не могут быть приняты. Я решил принять этот ответ вместо того, чтобы копировать два данных ответа в свой собственный ответ, поскольку этот ответ отвечает на заданный вопрос, а другой ответ отвечает на незаданный вопрос. - person E.T.; 25.02.2013
comment
@Akam Акам, ну тогда каким должен быть ответ, если вопрос явно спрашивает, возможно ли это или нет, а это определенно нет? - person Dogbert; 25.02.2013

Вы могли бы сделать что-то ужасное, когда у вас есть очень много вещей для сравнения.

<?php
$arr = [1, 2, 3];
$less_than = function($a, $b) {
    return $a < $b;
};
$greater_than = function($a, $b) {
    return $a > $b;
};

function apply_operator($arr, $operator) {
    for ($i = 0; $i < sizeof($arr) - 1; $i++) {
        if (!$operator($arr[$i], $arr[$i + 1])) {
            return false;
        }
    }
    return true;
}

var_dump(apply_operator($arr, $less_than)); // true
var_dump(apply_operator($arr, $greater_than)); // false

Но для большего/меньшего можно просто отсортировать и сравнить с оригиналом, а для равного можно проверить размер array_unique.

person Waleed Khan    schedule 25.02.2013
comment
К сожалению, написание пользовательской функции не является поддерживаемым языком синтаксисом, это просто обычная функция. - person E.T.; 25.02.2013
comment
Вы ответили на вопрос, который никто не задавал. - person E.T.; 25.02.2013
comment
@ И.Т. Это является «синтаксисом для объединения сравнений в цепочку без явного объединения двух разных сравнений по И». - person Waleed Khan; 25.02.2013