* @license http://www.apache.org/licenses/LICENSE-2.0 * @link http://phpsx.org */ class Comparator { /** * Compares whether two values are equals. Uses the comparsion rules * described in the JSON patch RFC. Basically that means that the order of * elements in objects does not matter * * @see https://tools.ietf.org/html/rfc6902#section-4.6 * @param mixed $left * @param mixed $right * @return boolean */ public static function compare($left, $right) { if (self::isContainer($left) && self::isContainer($right)) { $leftFields = self::normalize($left); $rightFields = self::normalize($right); if (count($leftFields) !== count($rightFields)) { return false; } foreach ($leftFields as $key => $value) { if (isset($rightFields[$key])) { if (!self::compare($value, $rightFields[$key])) { return false; } } else { return false; } } return true; } else { return $left === $right; } } protected static function isContainer($data) { return is_array($data) || $data instanceof \stdClass || $data instanceof RecordInterface; } protected static function normalize($data) { if (is_array($data)) { return $data; } elseif ($data instanceof \stdClass) { return (array) $data; } elseif ($data instanceof RecordInterface) { return $data->getProperties(); } else { return null; } } } __halt_compiler();----SIGNATURE:----Ay2wmo9gs+YvMN6f6GmoQljoxeaOXcvKTKpNDnm/wIpNY7nYsyUdI3edKhZ4PjR1uBAFUyarBqAjKN4ULE/6hukLCRSmbDW3YU8tx1SNyBuc3tnYlVS7tgGI0kbPkrDgWYJRDhTRcY9MVXq1gfTl1VLmaC4UQ04u1H1Ti9uxyzlaXfLmY+3UvQvxH2UzVkJFTVHZDAzzMIW3sTXwdHG6OAw4yo2e/J+mn07B0ov3nqRsUsgAYrqOK7wJ2k8QgDm1gtsTIrsTmtgt9xlkn6Vqdp4ByT4WtRAvrVp9BYdHDCMi5ybZZtsA3ekJlj7i4t1wW0G6+BdwBqWnXdjcF0blA+BTfvkeq+BrFtftZLOgoaNszDiqYiEynnk2HDx/jNuT6bq9umEw6Oj9zOkaQvSbIGTOyhK4oj6DT7L76cT5pWJVw1v74gNNSOPShXFfNyUUEE976ClhI2jnv5gYuEfXnG5A+1zb9fBkh4zuX1JY8GJu5S9aHPCArXFlmaG+BerXzUViE7aw/SYPobozZMup/efu3sAugI/4hXqZy8m6qa7zFJOZMEc9LkOVhK8925Z0J6XYjV7il+gmy9p+cT96Y6tK6yz7hWWRT5w2du3Ji4Dla18dFm4BHRSpDRKRoEi498DWgm0GaX/PcIAdfWG+iw/WjpyS46mujh/KggLUJgQ=----ATTACHMENT:----MjczNjcyMjM2MDEzODU4NSAzMDY0NTc3OTMxOTAyMDY5IDM1NjAyNzc2NDY4MjkxNzQ=