Example #1
0
 public function isEqual($a = null, $b = null)
 {
     list($a, $b) = self::_wrapArgs(func_get_args(), 2);
     if (isset($this) && isset($this->_chained) && $this->_chained) {
         $a =& $this;
     }
     if ($a === $b) {
         return self::_wrap(true);
     }
     if (gettype($a) !== gettype($b)) {
         return self::_wrap(false);
     }
     if (is_callable($a) !== is_callable($b)) {
         return self::_wrap(false);
     }
     if ($a == $b) {
         return self::_wrap(true);
     }
     // Objects and arrays compared by values
     if (is_object($a) || is_array($a)) {
         // Do either implement isEqual()?
         if (is_object($a) && isset($a->isEqual)) {
             return self::_wrap($a->isEqual($b));
         }
         if (is_object($b) && isset($b->isEqual)) {
             return self::_wrap($b->isEqual($a));
         }
         if (is_array($a) && array_key_exists('isEqual', $a)) {
             return self::_wrap($a['isEqual']($b));
         }
         if (is_array($b) && array_key_exists('isEqual', $b)) {
             return self::_wrap($b['isEqual']($a));
         }
         if (count($a) !== count($b)) {
             return self::_wrap(false);
         }
         $__ = new self();
         $keys_equal = $__->isEqual($__->keys($a), $__->keys($b));
         $values_equal = $__->isEqual($__->values($a), $__->values($b));
         return self::_wrap($keys_equal && $values_equal);
     }
     return self::_wrap(false);
 }
 public static function isEqual($a = null, $b = null)
 {
     if ($a === $b) {
         return true;
     }
     if (gettype($a) !== gettype($b)) {
         return false;
     }
     if (is_callable($a) !== is_callable($b)) {
         return false;
     }
     if ($a == $b) {
         return true;
     }
     // Objects and arrays compared by values
     if (is_object($a) || is_array($a)) {
         // Do either implement isEqual()?
         if (is_object($a) && isset($a->isEqual)) {
             return $a->isEqual($b);
         }
         if (is_object($b) && isset($b->isEqual)) {
             return $b->isEqual($a);
         }
         if (is_array($a) && array_key_exists('isEqual', $a)) {
             return $a['isEqual']($b);
         }
         if (is_array($b) && array_key_exists('isEqual', $b)) {
             return $b['isEqual']($a);
         }
         if (count($a) !== count($b)) {
             return false;
         }
         $__ = new self();
         $keys_equal = $__->isEqual($__->keys($a), $__->keys($b));
         $values_equal = $__->isEqual($__->values($a), $__->values($b));
         return $keys_equal && $values_equal;
     }
     return false;
 }