mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Precise destructor errors
This commit is contained in:
parent
3c1cb7431e
commit
d4aa155d25
3 changed files with 17 additions and 7 deletions
|
@ -46,17 +46,28 @@ ZEND_API void zend_objects_destroy_object(zend_object *object, zend_object_handl
|
|||
/* Ensure that if we're calling a private function, we're allowed to do so.
|
||||
*/
|
||||
if (object->ce != EG(scope)) {
|
||||
zend_class_entry *ce = object->ce;
|
||||
|
||||
zend_nuke_object(object TSRMLS_CC); /* unfortunately we *must* destroy it now anyway */
|
||||
/* this is a E_ERROR in real but we can't do that right now because of problems in shutdown */
|
||||
zend_error(E_WARNING, "Call to private destructor from context '%s'", EG(scope) ? EG(scope)->name : "");
|
||||
zend_error(EG(in_execution) ? E_ERROR : E_WARNING,
|
||||
"Call to private %s::__destruct from context '%s'%s",
|
||||
ce->name,
|
||||
EG(scope) ? EG(scope)->name : "",
|
||||
EG(in_execution) ? "" : " during shutdown ignored");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
/* Ensure that if we're calling a protected function, we're allowed to do so.
|
||||
*/
|
||||
if (!zend_check_protected(destructor->common.scope, EG(scope))) {
|
||||
zend_class_entry *ce = object->ce;
|
||||
|
||||
zend_nuke_object(object TSRMLS_CC); /* unfortunately we *must* destroy it now anyway */
|
||||
zend_error(E_WARNING, "Call to protected destructor from context '%s'", EG(scope) ? EG(scope)->name : "");
|
||||
zend_error(EG(in_execution) ? E_ERROR : E_WARNING,
|
||||
"Call to protected %s::__destruct from context '%s'%s",
|
||||
ce->name,
|
||||
EG(scope) ? EG(scope)->name : "",
|
||||
EG(in_execution) ? "" : " during shutdown ignored");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,5 +16,4 @@ $obj = NULL;
|
|||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: Call to protected destructor from context '' in %sfactory_and_singleton_005.php on line %d
|
||||
Done
|
||||
Fatal error: Call to protected test::__destruct from context '' in %sfactory_and_singleton_005.php on line %d
|
||||
|
|
|
@ -16,5 +16,5 @@ $obj = NULL;
|
|||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: Call to private destructor from context '' in %sfactory_and_singleton_006.php on line %d
|
||||
Done
|
||||
Fatal error: Call to private test::__destruct from context '' in %sfactory_and_singleton_006.php on line %d
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue