code: public static function isEqual($a, $b)
      {
          if ($a === $b) {
              return true;
          } elseif ($a instanceof \stdClass) {
              return self::isEqual((array) $a, $b);
          } elseif ($b instanceof \stdClass) {
              return self::isEqual($a, (array) $b);
          } elseif ($a instanceof JmesPathableArrayInterface) {
              return Utils::isEqual(iterator_to_array($a), $b);
          } elseif ($b instanceof JmesPathableArrayInterface) {
              return Utils::isEqual($a, iterator_to_array($b));
          } elseif ($a instanceof JmesPathableObjectInterface) {
              return Utils::isEqual($a->toArray(), $b);
          } elseif ($b instanceof JmesPathableObjectInterface) {
              return Utils::isEqual($a, $b->toArray());
          } else {
              return false;
          }
      }
docs: JSON aware value comparison function.
  
  @param mixed $a First value to compare
  @param mixed $b Second value to compare
  
  @return bool