IsEqualsTo($other)) // - если равны, то возвращаем 0 return 0; // Возвращаем результат сравнения количества элементов return $this->Count() > $other->Count() ? 1 : -1; } /** * @inheritDoc */ public function IsEqualsTo (mixed $other): bool { // Получаем хэши // - этого объекта $thisHash = $this->Hash(); // - переданного объекта $otherHash = $other->Hash(); // Сравниваем хэши и возвращаем результат return $thisHash == $otherHash; } /** * @inheritDoc */ public function CompareByProperty (string $propertyName, mixed $other): int { // Получаем значения свойств // - этого объекта $thisProperty = $this->GetColumn($propertyName); // - переданного объекта $otherProperty = $other->GetColumn($propertyName); // Сравниваем их по количеству if (count($thisProperty) !== count($otherProperty)) // - если количество элементов не совпадает, то возвращаем результат return count($thisProperty) > count($otherProperty) ? 1 : -1; // Переменная для хранения результата $delta = 0; // Проходимся по массивам for ($i = 0; $i < count($thisProperty); $i++) { // - получаем значения // -- текущего массива $thisValue = $thisProperty[$i]; // -- переданного массива $otherValue = $otherProperty[$i]; // - если значения равны if ($thisValue === $otherValue) // - то пропускаем элемент continue; // - иначе сравниваем if ($thisValue > $otherValue) // - если текущее значение больше, то увеличиваем счетчик $delta++; else // - иначе уменьшаем счетчик $delta--; } // Возвращаем результат return $delta === 0 ? 0 : ($delta > 0 ? 1 : -1); } }