public function getMatchingIds()
    {
        if ($this->arrMatches !== null) {
            return $this->arrMatches;
        }

        $arrIds = null;
        foreach ($this->arrFilterRules as $objFilterRule) {
            /** @var IFilterRule $objFilterRule */
            $arrRuleIds = $objFilterRule->getMatchingIds();
            if ($arrRuleIds === null) {
                continue;
            }
            // The first rule determines the master ids.
            if ($arrIds === null) {
                $arrIds = $arrRuleIds;
            } else {
                // NOTE: all rules are implicitely "AND"-ed together.
                $arrIds = array_intersect($arrIds, $arrRuleIds);
                // When no ids are left any more, the result will stay empty, do not evaluate any further rules.
                if (count($arrIds) == 0) {
                    break;
                }
            }
        }
        $this->arrMatches = $arrIds;

        return $arrIds;
    }
public function getMatchingIds()
    {
        if ($this->arrMatches !== null) {
            return $this->arrMatches;
        }

        $arrIds = null;
        foreach ($this->arrFilterRules as $objFilterRule) {
            /** @var IFilterRule $objFilterRule */
            $arrRuleIds = $objFilterRule->getMatchingIds();
            if ($arrRuleIds === null) {
                continue;
            }
            // The first rule determines the master ids.
            if ($arrIds === null) {
                $arrIds = $arrRuleIds;
            } else {
                // NOTE: all rules are implicitely "AND"-ed together.
                $arrIds = array_intersect($arrIds, $arrRuleIds);
                // When no ids are left any more, the result will stay empty, do not evaluate any further rules.
                if (count($arrIds) == 0) {
                    break;
                }
            }
        }
        $this->arrMatches = $arrIds;

        return $arrIds;
    }
{@inheritdoc}