zend_class_entry *ce = va_arg(*va, zend_class_entry *);
if (Z_TYPE_PP(arg) == IS_OBJECT &&
- instanceof_function(Z_OBJCE_PP(arg), ce TSRMLS_CC)) {
+ (!ce || instanceof_function(Z_OBJCE_PP(arg), ce TSRMLS_CC))) {
*p = *arg;
} else {
if (Z_TYPE_PP(arg) == IS_NULL && return_null) {
object = va_arg(va, zval **);
ce = va_arg(va, zend_class_entry *);
*object = this_ptr;
+ if (ce && !instanceof_function(Z_OBJCE_P(this_ptr), ce TSRMLS_CC)) {
+ zend_error(E_CORE_ERROR, "%s::%s() must be derived from %s::%s",
+ ce->name, get_active_function_name(TSRMLS_C), Z_OBJCE_P(this_ptr)->name, get_active_function_name(TSRMLS_C));
+ }
retval = zend_parse_va_args(num_args, p, &va, 0 TSRMLS_CC);
va_end(va);