I am trying to find a way to get the source code for (user defined) PHP functions in a string.
For normal code this is easy, using reflection I can find the file and line numbers where the function is defined; then I can open the file and read the function source code.
This will not work if a function is defined in eval’d code. I do not want to keep record of all eval’d code.
Is this possible? If yes, then how?
Example code:
JavaScript
x
function myfunction() {
echo "Test";
}
eval('
function myevalfunction() {
echo "Test";
}
');
$a = new ReflectionFunction('myfunction');
echo $a;
$b = new ReflectionFunction('myevalfunction');
echo $b;
Output:
JavaScript
Function [ <user> <visibility error> function myfunction ] {
@@ test.php 3 - 5
}
Function [ <user> <visibility error> function myevalfunction ] {
@@ test.php(11) : eval()'d code 2 - 4
}
Advertisement
Answer
How about you define your own eval-function, and do the tracking there?
JavaScript
function myeval($code) {
my_eval_tracking($code, ); # use traceback to get more info if necessary
# (...)
return eval($code);
}
That said, I do share a lot of Kent Fredric’s feelings on eval in this case.