The part I found difficult was in the handlers - we only have `compare`, no equals. The only way we can have the handler differentiate between equality and ordering is if we pass a parameter to the handler, which means we'd have to change the header.
From: `typedef int (*zend_object_compare_zvals_t)(zval *result, zval *op1, zval *op2);` To: `typedef int (*zend_object_compare_zvals_t)(zval *result, zval *op1, zval *op2, int mode);` Or we could introduce a new handler? Not sure if that's something we can do easily.