<?php
class PreviousException extends \Exception {}
class One extends \RuntimeException {
// Just a standard exception
}
class Two extends \RuntimeException{
// An exception with custom constructor parameters
public function __construct($customMessage, PreviousException $e) {
parent::__construct($customMessage . "LOL", $e->getCode(), $e);
}
}
try {
throw new Two('Throwing "Two", but catch will receive a different class type if I specify just "\Exception" in the catch statement not "Two"', new PreviousException());
}
catch (\Exception $e) {
var_dump($e);
}
object(Two)#1 (7) {
["message":protected]=>
string(128) "Throwing "Two", but catch will receive a different class type if I specify just "\Exception" in the catch statement not "Two"LOL"
["string":"Exception":private]=>
string(0) ""
["code":protected]=>
int(0)
["file":protected]=>
string(9) "/in/h7WFL"
["line":protected]=>
int(19)
["trace":"Exception":private]=>
array(0) {
}
["previous":"Exception":private]=>
object(PreviousException)#2 (7) {
["message":protected]=>
string(0) ""
["string":"Exception":private]=>
string(0) ""
["code":protected]=>
int(0)
["file":protected]=>
string(9) "/in/h7WFL"
["line":protected]=>
int(19)
["trace":"Exception":private]=>
array(0) {
}
["previous":"Exception":private]=>
NULL
}
}
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
object(Two)#1 (7) {
["message":protected]=>
string(128) "Throwing "Two", but catch will receive a different class type if I specify just "\Exception" in the catch statement not "Two"LOL"
["string":"Exception":private]=>
string(0) ""
["code":protected]=>
int(0)
["file":protected]=>
string(9) "/in/h7WFL"
["line":protected]=>
int(19)
["trace":"Exception":private]=>
array(0) {
}
["previous":"Exception":private]=>
object(PreviousException)#2 (7) {
["message":protected]=>
string(0) ""
["string":"Exception":private]=>
string(0) ""
["code":protected]=>
int(0)
["file":protected]=>
string(9) "/in/h7WFL"
["line":protected]=>
int(19)
["trace":"Exception":private]=>
array(0) {
}
["previous":"Exception":private]=>
NULL
}
}