php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.11.2004, 17:33  
Gast
 
Beiträge: n/a
Standard Zeiger-Problem in PHP 4.3.1

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
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.11.2004, 17:55  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Ideen hätte ich zwei:
PHP-Code:
call_user_func('_mod_'.$mod.'_submit',&$f); //zusätzliches & für den Parameter 
Oder statt call_user_func() variable funktionen verwenden, also
PHP-Code:
$funcname '_mod_'.$mod.'_submit';
$
$funcname($f); 
beides ungetestet

PS: Es gibt keine Zeiger in PHP, die Dinger heissen Referenzen.
__________________
mod = master of disaster
Waq ist offline   Mit Zitat antworten
Alt 18.11.2004, 11:58  
Benutzer
 
Registriert seit: 16.06.2004
Beiträge: 81
PHP-Kenntnisse:
Fortgeschritten
RcRaCk2k
RcRaCk2k eine Nachricht über ICQ schicken RcRaCk2k eine Nachricht über MSN schicken RcRaCk2k eine Nachricht über Yahoo! schicken
Standard

Stimmt keine Zeiger sondern Referenzen. Bei PHP gibt es ja keine Adressen Wär ja noch schöner Speicherreservierung, freigeben hinundherschieben etc.

Das ${${functionname}} ist echt dreckig Da zieht man die Version von call_user_func doch eher vor.

Stimmt der Parameter f muss mit vorangestelltem & delivered werden, ansonsten erstellt er genau zu diesem Zeitpunkt eine Kopie des Objektes.

Ist leider bei PHP 4 noch so.. Wie du schon sagtest "gepriesen sei PHP5". Arbeite schon seit längerem damit. Muss aber echt sagen, dass die Umstellung von PHP4 auf PHP5 echt nicht grad der leichteste ist. In Punkto Referencing und Instancing hat sich vieles geändert.

Grüße Michael
http://www.michaelrack.de
RcRaCk2k ist offline   Mit Zitat antworten
Alt 18.11.2004, 16:57  
Gast
 
Beiträge: n/a
Standard

$$funcname hat nicht geklappt und das Referenzieren bei der Übergabe hatte ich schon probiert, das klappt auch nicht - kann es auch nicht, denn laut Code und PHP Doku ist $f zum Punkt der Übergabe an call_user_func() bereits eine Referenz, es muss lediglich in der Endfunktion nochmal mit vorangestelltem & gesetzt werden. Ich hab das Problem grummelnd anders lösen müssen, freue mich aber drauf die Applikation endlich auf PHP5 zu portieren.

Zum Thema Referenzen und Zeiger... ich bin nur schreibfaul (den C/C++ Unterschied zwischen den beiden kenne ich... )
  Mit Zitat antworten
Alt 18.11.2004, 17:15  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Das Referenzieren bei der Übergabe funktioniert bei mir in PHP 4.3.8. Die definition des Parameters als Referenz in der Funktionsdefinition wird offensichtlich ignoriert.

Beispiel:
PHP-Code:
<?php
$orig 
"original";

function 
dummy(&$ref) {
  
$ref "dummy";
}

function 
dummy2(&$ref) {
  
$ref "dummy2";
}

function 
dummy3(&$ref) {
  
$ref "dummy3";
}

var_dump($orig);
dummy($orig);
var_dump($orig);
call_user_func('dummy2',$orig);
var_dump($orig);
call_user_func('dummy3',&$orig);
var_dump($orig);

?>
Ausgabe:
string(8) "original"
string(5) "dummy"
string(5) "dummy"
string(6) "dummy3"

Die Variante von dummy2 funktioniert also nicht, dummy3 schon.
__________________
mod = master of disaster
Waq ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
Sessions Problem StephenKing PHP Tipps 2008 3 16.10.2007 08:30
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Problem mit Weiterleitung PHP Tipps 2004-2 16 22.12.2004 17:49
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
[Erledigt] PHP Upload (Master Value/Local Value Problem) PHP-Fortgeschrittene 5 23.11.2004 07:21
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
Vermutlicher Konflikt zwischen Version 4.3.1 und 4.3.4? PHP Tipps 2004 1 15.06.2004 03:08
[Erledigt] Problem mit Timestamp! PHP Tipps 2004 24 08.06.2004 19:51
Login Problem PHP Tipps 2004 4 04.06.2004 18:46
foreach problem mAy^daY PHP Tipps 2004 3 02.06.2004 20:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php 4 zeiger referenzen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:57 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.