_elementMatchers = $elementMatchers; } protected function matchesSafelyWithDiagnosticDescription($array, Hamcrest_Description $mismatchDescription) { $matching = new Hamcrest_Array_MatchingOnce( $this->_elementMatchers, $mismatchDescription ); foreach ($array as $element) { if (!$matching->matches($element)) { return false; } } return $matching->isFinished($array); } public function describeTo(Hamcrest_Description $description) { $description->appendList('[', ', ', ']', $this->_elementMatchers) ->appendText(' in any order') ; } /** * An array with elements that match the given matchers. * * @factory containsInAnyOrder ... */ public static function arrayContainingInAnyOrder(/* args... */) { $args = func_get_args(); return new self(Hamcrest_Util::createMatcherArray($args)); } }