Hellihello dedlfix,
Das liegt dann aber daran, dass in dem aktuellen Scope so viele Variablen rumliegen. Im globalen Scope kann das aufgrund der bekannten globalen Variablen zuzüglich $GLOBALS schon recht viel werden.
0: GLOBALS
1: _ENV
2: HTTP_ENV_VARS
3: argv
4: argc
5: _POST
6: HTTP_POST_VARS
7: _GET
8: HTTP_GET_VARS
9: _COOKIE
10: HTTP_COOKIE_VARS
11: _SERVER
12: HTTP_SERVER_VARS
13: _FILES
14: HTTP_POST_FILES
15: _REQUEST
Erstell mal eine Funktion mit einigen wenigen lokalen Variablen und ruf darin trigger_error() auf. Dann hält sich der Inhalt des 5. Parameteres in Grenzen.
Jap:
class My
{
public static $total = 0;
public static function trigger_error_test($param)
{
$var1=$param;
$var2=2;
$var3=array(1, 2, 3);
trigger_error();
}
}
My::trigger_error_test("testparam");
bringt als context:
array(4) {
["param"]=>
string(9) "testparam"
["var1"]=>
string(9) "testparam"
["var2"]=>
int(2)
["var3"]=>
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
}
Bei "debug_backtrace()" scheints mir, dass da Werte vom fünften Paramter wieder auftauchen. Irgendwie krieg ich die rekursiv grad nicht gezählt. Immerhing finde ich im Array debug_backtrace() an Stelle 3 den Key "function", der noch einen Hinweis auf die Funktion gibt.
debug_backtrace() enthält nur die Werte der Funktionsparameter. Andere lokale Variablen sind darin nicht enthalten.
--- START var_dump debug_backtrace() ---:
array(3) {
[0]=>
array(2) {
["function"]=>
string(18) "my_error_handler_2"
["args"]=>
array(5) {
[0]=>
&int(2)
[1]=>
&string(41) "Wrong parameter count for trigger_error()"
[2]=>
&string(44) "D:\xampp\htdocs\PHP_Tests\Error_Handling.php"
[3]=>
&int(70)
[4]=>
&array(4) {
["param"]=>
string(9) "testparam"
["var1"]=>
string(9) "testparam"
["var2"]=>
int(2)
["var3"]=>
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
}
}
}
[1]=>
array(4) {
["file"]=>
string(44) "D:\xampp\htdocs\PHP_Tests\Error_Handling.php"
["line"]=>
int(70)
["function"]=>
string(13) "trigger_error"
["args"]=>
array(0) {
}
}
[2]=>
array(6) {
["file"]=>
string(44) "D:\xampp\htdocs\PHP_Tests\Error_Handling.php"
["line"]=>
int(87)
["function"]=>
string(18) "trigger_error_test"
["class"]=>
string(2) "My"
["type"]=>
string(2) "::"
["args"]=>
array(1) {
[0]=>
&string(9) "testparam"
}
}
}
--- END var_dump debug_backtrace() ---:
debug_backtrace()[2] bringt dann in "function" und "class" Funktion und Klasse. "type" bringt ein Paaym-Nekudotaym. Aha. Warum aber die ganzen Referenzen "&"?
var_dump($old_error_hanlder) bringt aber NULL, oder?
Wenn du der erste bist, der den ErrorHandler setzt, dann ja. Wenn du außerdem der einzige bist, kannst du den Rückgabewert komplett ignorieren.
Aha, die ersten werden die letzten sein. Wer sollte denn sonst noch am Werk sein?
Dank und Gruß,