Ich habe hier ein Zeigerproblem und suche eine Lösung, möchte aber dabei nur ungern auf den Aufruf von call_user_func() verzichten:
Im Skript wird eine Funktion in einer dynamisch includeten Datei wie folgt aufgerufen:
PHP-Code:
function _main_submit () {
global $mod;
$f =& $_ENV['_FLIB']['html']['main'];
if (function_exists('_mod_'.$mod.'_submit')) {
call_user_func('_mod_'.$mod.'_submit',$f);
}
}
Die aufgerufene Trigger-Funktion:
PHP-Code:
function _mod_login_submit( &$f )
{
$login=login($f->Field['uid']->get_value(),$f->Field['passwd']->get_value());
if (!$login) {
$f->raise_error('Login oder Passwort falsch!');
$f->Field['passwd']->set_value('');
log_write('Access denied for user: '.$f->Field['uid']->get_value(),_LOG_AUTH);
} else {
...
$_ENV['_FLIB']['html']['main'] ist dabei ein komplexes Formularobjekt, auf dessen Instanz ich natürlich nur mit Zeigern zugreifen darf, sonst gibts Chaos wegen der typischen PHP4 Kopiererei (gepriesen sei PHP 5, ich werde sofort umsteigen sobald der stabiler ist). In allen anderen Aufrufen läuft es ja auch ganz sauber, wenn man den Zeiger richtig anlegt, aber sobald ich diesen durch die call_user_func() schleife erhalte ich in _mod_login_submit() nur eine Objektkopie und damit zu arbeiten bringt nix mehr.
Nun die Frage: kennt jemand eine Möglichkeit wie ich call_user_func() überzeugen kann an dieser Stelle tatsächlich den Zeiger und nicht eine Kopie des Objektes an die Funktion _mod_login_submit() zu senden? Ich habs auch im Aufruf mit einem & davor probiert, ging auch nicht.. Innerhalb der Funktion ist $f bereits eine (falsche) Kopie und kein Zeiger mehr.
Das Ganze läuft auf Apache 1.3.27 SuSE Linux 9.0, PHP Version 4.3.1
Grüsse
Lev