public static function compare(Item $a, Item $b): int
    {
        return Symbol::compare($a->subject, $b->subject)
            ?: Symbol::compareList($a->passed, $b->passed)
                ?: Symbol::compareList($a->further, $b->further)
                    ?: ($b->eof - $a->eof);
    }
public static function compare(Item $a, Item $b): int
    {
        return Symbol::compare($a->subject, $b->subject)
            ?: Symbol::compareList($a->passed, $b->passed)
                ?: Symbol::compareList($a->further, $b->further)
                    ?: ($b->eof - $a->eof);
    }
public static function compare ( Item $ a , Item $ b ) : int { return Symbol :: compare ( $ a -> subject , $ b -> subject ) ? : Symbol :: compareList ( $ a -> passed , $ b -> passed ) ? : Symbol :: compareList ( $ a -> further , $ b -> further ) ? : ( $ b -> eof - $ a -> eof ) ; }
Compare two items

Two items are equal when its both has equal subjects, passed and further symbols
and EOF marker.
@param Item $a
@param Item $b
@return int Returns 0 when items are equal
Compare two items