diff options
Diffstat (limited to 'Zend/zend_closures.c')
-rw-r--r-- | Zend/zend_closures.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index 56808e2496..6ee2325509 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -82,10 +82,14 @@ static zend_bool zend_valid_closure_binding( ZSTR_VAL(Z_OBJCE_P(newthis)->name)); return 0; } - } else if (!(func->common.fn_flags & ZEND_ACC_STATIC) && func->common.scope - && func->type == ZEND_INTERNAL_FUNCTION) { - zend_error(E_WARNING, "Cannot unbind $this of internal method"); - return 0; + } else if (is_fake_closure && func->common.scope + && !(func->common.fn_flags & ZEND_ACC_STATIC)) { + if (func->type == ZEND_INTERNAL_FUNCTION) { + zend_error(E_WARNING, "Cannot unbind $this of internal method"); + return 0; + } else { + zend_error(E_DEPRECATED, "Unbinding $this of a method is deprecated"); + } } if (scope && scope != func->common.scope && scope->type == ZEND_INTERNAL_CLASS) { |