function difference(Set $that) {
        $difference = $this->cloneEmpty();

        if ($that === $this) {
            return $difference;
        }

        $this->addIf($difference, $this, negate([$that, 'has']));
        $this->addIf($difference, $that, negate([$this, 'has']));

        return $difference;
    }
function difference(Set $that) {
        $difference = $this->cloneEmpty();

        if ($that === $this) {
            return $difference;
        }

        $this->addIf($difference, $this, negate([$that, 'has']));
        $this->addIf($difference, $that, negate([$this, 'has']));

        return $difference;
    }
function difference ( Set $ that ) { $ difference = $ this -> cloneEmpty ( ) ; if ( $ that === $ this ) { return $ difference ; } $ this -> addIf ( $ difference , $ this , negate ( [ $ that , 'has' ] ) ) ; $ this -> addIf ( $ difference , $ that , negate ( [ $ this , 'has' ] ) ) ; return $ difference ; }
Creates the set that contains the items in the current set that are not
contained in the provided set, as well as items that are in the
provided set that are not in the current set.

Formally:
A ⊖ B = {x : x ∈ (A \ B) ∨ (B \ A)}

@param Set $that
@return Set
Creates the set that contains the items in the current set that are not contained in the provided set as well as items that are in the provided set that are not in the current set .