function fL1($p1 = -10) { try { echo "fL1: In try-block\n"; // throw new Exception(); throw new Exception("fL1 Message", 123); } catch (Exception $e) { echo "fL1: In catch-block\n"; displayExceptionObject($e); } finally { echo "fL1: In finally-block\n"; } echo "fL1: Beyond try/catch/finally blocks\n==========\n"; echo "fL1: Calling fL2\n"; $a = -4.5; fL2(2.3, $a); // pass 2nd arg as a non-literal to see how traceback handles it //fL2(2.3); // see what happens when a default argument value is used }
function fL1($p1 = -10) { // define fL2 inside fL1 function fL2($p1, $p2 = -100) { // define fL3 inside fL2 function fL3($p1, $p2, $p3 = -1000) { try { echo "fL3: In try-block\n"; // throw new Exception(); throw new Exception("fL3 Message", 345); } catch (Exception $e) { echo "fL3: In catch-block\n"; displayExceptionObject($e); } finally { echo "fL3: In finally-block\n"; } echo "fL3: Beyond try/catch/finally blocks\n==========\n"; } try { echo "fL2: In try-block\n"; // throw new Exception(); throw new Exception("fL2 Message", 234); } catch (Exception $e) { echo "fL2: In catch-block\n"; displayExceptionObject($e); } finally { echo "fL2: In finally-block\n"; } // fL2 definition continues here echo "fL2: Beyond try/catch/finally blocks\n==========\n"; echo "fL2: Calling fL3\n"; $a = "xyz"; $b = NULL; $c = TRUE; fL3($a, $b, $c); // pass args as a non-literal to see how traceback handles them //fL3($a, $b); // see what happens when a default argument value is used } try { echo "fL1: In try-block\n"; // throw new Exception(); throw new Exception("fL1 Message", 123); } catch (Exception $e) { echo "fL1: In catch-block\n"; displayExceptionObject($e); } finally { echo "fL1: In finally-block\n"; } // fL1 definition continues here echo "fL1: Beyond try/catch/finally blocks\n==========\n"; echo "fL1: Calling fL2\n"; $a = -4.5; fL2(2.3, $a); // pass 2nd arg as a non-literal to see how traceback handles it // fL2(2.3); // see what happens when a default argument value is used }