1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82:
<?php
namespace MvcCore\Model;
trait Comparers {
protected static function isEqual ($value1, $value2) {
$valuasAreTheSame = FALSE;
$value1IsNull = $value1 === NULL;
$value2IsNull = $value2 === NULL;
if ($value1IsNull && $value2IsNull) {
$valuasAreTheSame = TRUE;
} else if (!$value1IsNull && !$value2IsNull) {
if (is_float($value1) && is_float($value2)) {
$valuasAreTheSame = abs($value1 - $value2) < PHP_FLOAT_EPSILON;
} else if (
(is_scalar($value1) && is_scalar($value2)) ||
(is_array($value1) && is_array($value2)) ||
($value1 instanceof \stdClass && $value2 instanceof \stdClass)
) {
$valuasAreTheSame = $value1 === $value2;
} else if ($value1 instanceof \DateTimeInterface && $value2 instanceof \DateTimeInterface) {
$valuasAreTheSame = $value1 == $value2;
} else if ($value1 instanceof \DateInterval && $value2 instanceof \DateInterval) {
$valuasAreTheSame = abs(
static::convertIntervalToFloat($value1) -
static::convertIntervalToFloat($value2)
) < PHP_FLOAT_EPSILON;
} else if ($value1 instanceof \DateTimeZone && $value2 instanceof \DateTimeZone) {
$now = new \DateTime('now');
$valuasAreTheSame = $value1->getOffset($now) === $value2->getOffset($now);
} else if ($value1 instanceof \DatePeriod && $value2 instanceof \DatePeriod) {
$valuasAreTheSame = (
$value1->getStartDate() == $value2->getStartDate() &&
$value1->getEndDate() == $value2->getEndDate() &&
abs(
static::convertIntervalToFloat($value1->getDateInterval()) -
static::convertIntervalToFloat($value2->getDateInterval())
) < PHP_FLOAT_EPSILON
);
} else if (is_resource($value1) && is_resource($value2)) {
$valuasAreTheSame = intval($value1) == intval($value2);
} else {
$valuasAreTheSame = $value1 === $value2;
}
}
return $valuasAreTheSame;
}
}