<?php
class Tr
{
public $s;
/**
* Tr constructor.
* @param $s
*/
public function __construct($s)
{
$this->s = $s;
}
public function __destruct()
{
echo "__destruct $this->s" . PHP_EOL;
}
}
function b() {
$tr = new Tr('b');
echo 'b' . PHP_EOL;
c($tr);
// If exception thrown here, Tr::__destruct is called
// throw new \Exception('ee');
// Or if you call c() without passing $tr, Tr::__destruct is called
}
/**
* @param Tr $tr
*/
function c($tr = null) {
throw new \Exception('ee');
}
try {
b();
} catch(\Exception $ex) {
echo 'catch'. PHP_EOL;
throw $ex;
}
b
catch
Fatal error: Uncaught Exception: ee in /in/hNUa4:35
Stack trace:
#0 /in/hNUa4(25): c(Object(Tr))
#1 /in/hNUa4(39): b()
#2 {main}
thrown in /in/hNUa4 on line 35
__destruct b
Process exited with code 255.
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
b
catch
Fatal error: Uncaught Exception: ee in /in/hNUa4:35
Stack trace:
#0 /in/hNUa4(25): c(Object(Tr))
#1 /in/hNUa4(39): b()
#2 {main}
thrown in /in/hNUa4 on line 35
__destruct b
Process exited with code 255.
b
catch
Fatal error: Uncaught Exception: ee in /in/hNUa4:35
Stack trace:
#0 /in/hNUa4(25): c(Object(Tr))
#1 /in/hNUa4(39): b()
#2 {main}
thrown in /in/hNUa4 on line 35
Process exited with code 255.