<?php
$disabled_funcs = [];
// original code
function func ($msg) {
echo "$msg\n";
}
//The wrapped one:
function _func () {
global $disabled_funcs;
$func = substr (__FUNCTION__, 1); if (isset($disabled_funcs[$func])) throw new Exception ("Function $func is disabled.");
}
function disable_func ($name) {
global $disabled_funcs;
$disabled_funcs[$name] = 1;
}
function enable_func ($name) {
global $disabled_funcs;
if (isset($disabled_funcs[$name])) unset ($disabled_funcs[$name]); }
//Call the function:
_func ("Func not disabled.");
disable_func ("func");
try {
_func ("Exception will be raised, this will not be displayed");
} catch (Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
enable_func ("func");
_func ("Func enabled");
PD9waHAKCiRkaXNhYmxlZF9mdW5jcyA9IFtdOwoKLy8gb3JpZ2luYWwgY29kZQpmdW5jdGlvbiBmdW5jICgkbXNnKSB7CiAgZWNobyAiJG1zZ1xuIjsKfQoKLy9UaGUgd3JhcHBlZCBvbmU6CgpmdW5jdGlvbiBfZnVuYyAoKSB7CiAgZ2xvYmFsICRkaXNhYmxlZF9mdW5jczsKICAkZnVuYyA9IHN1YnN0ciAoX19GVU5DVElPTl9fLCAxKTsKICBpZiAoaXNzZXQoJGRpc2FibGVkX2Z1bmNzWyRmdW5jXSkpCiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uICgiRnVuY3Rpb24gJGZ1bmMgaXMgZGlzYWJsZWQuIik7CiAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5ICgkZnVuYywgZnVuY19nZXRfYXJncygpKTsKfQoKZnVuY3Rpb24gZGlzYWJsZV9mdW5jICgkbmFtZSkgewoJZ2xvYmFsICRkaXNhYmxlZF9mdW5jczsKCSRkaXNhYmxlZF9mdW5jc1skbmFtZV0gPSAxOwp9CgpmdW5jdGlvbiBlbmFibGVfZnVuYyAoJG5hbWUpIHsKCWdsb2JhbCAkZGlzYWJsZWRfZnVuY3M7CglpZiAoaXNzZXQoJGRpc2FibGVkX2Z1bmNzWyRuYW1lXSkpCgkJdW5zZXQgKCRkaXNhYmxlZF9mdW5jc1skbmFtZV0pOwp9CgovL0NhbGwgdGhlIGZ1bmN0aW9uOgpfZnVuYyAoIkZ1bmMgbm90IGRpc2FibGVkLiIpOwpkaXNhYmxlX2Z1bmMgKCJmdW5jIik7CnRyeSB7CglfZnVuYyAoIkV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCwgdGhpcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQiKTsKfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgllY2hvICRlLT5nZXRNZXNzYWdlKCkgLiBQSFBfRU9MOwp9CmVuYWJsZV9mdW5jICgiZnVuYyIpOwpfZnVuYyAoIkZ1bmMgZW5hYmxlZCIpOwoK