Variable Paramerter Anzahl einer Funktion

redneb

Mitglied
Hi,

ich muss seit ein paar Tagen wieder etwas in PHP programmieren und habe jetzt das Problem, dass ich eine variable Anzahl an Funktions-Parametern benötige.

Auf meiner Suche bin ich auf die Funktion func_get_args() (http://www.php-resource.de/handbuch/function.func-get-args.htm) gestoßen, diese würde mir vollkommen ausreichen, wenn diese nicht nur Kopien der Werte liefern würde. Ich brauche dringend die Referenz auf die übergebenen Parameter.

Die Funktion bind_param der Klasse mysqli_stmt hat diese Möglichkeit.
http://www.php.net/manual/en/mysqli-stmt.bind-param.php


Ich hoffe Ihr könnt mir helfen.



Gruß
redneb
 
Moin,

falls dir die maximale Anzahl an möglichen Parametern bekannt ist, könntest du die optionalen Parameter mit Vorgabewerten belegen.
Eine andere Möglichkeit wüsst ich da nicht :(
 
Hi,

leider kenne ich die Anzahl der Parameter nicht.

Eine Notlösung die mir noch einfällt wäre einfache ein Array zu übergeben, nur würde ich mir gerne das Array sparen.
 
Ein Gedankenkonstrukt, das wohl genau so nicht übernommen werden kann:

Du übergibst jeden der erhaltenen Parameter einer Funktion die nichts anders macht, außer einen übergebenen Paramter zurück zu geben.
Diesen Return speicherst du dann einfach in eine Variable.


Explizit:
PHP:
function VieleUnbekannteParamter(1, 2, 3 ,4 ,5) {
    foreach(/*Alle Paramter durchlaufen*/) {
        $$Laufvariable = ReturnParamter($Paramter[$Laufvariable]);
    }
}

function ReturnParamter($Paramter) {
    return $Paramter;
}


Hab aber keine Ahnung ob du so die Referenz bekommst...
 
Schmeiss die Variablen in die $GLOBAL und übergebe nur die Variablennamen
(ev. in einem Array in der $GLOBAL, so dass du sie gebündelt hast und jederzeit einfach wieder löschen kannst)

PHP:
function myFunction (){
    //dient nur als Beispiel für den Zugriff
    $GLOBAL['myVars'][func_get_arg(1)] = $GLOBAL['myVars'][func_get_arg(1)] + 1;
}

$GLOBAL['myVars'] = array();
$GLOBAL['myVars']['var1'] = 1;
$GLOBAL['myVars']['var2'] = "irgendwas";

myFunction('var1', 'var2');

echo $GLOBAL['myVars']['var1'];

//zurücksetzen
$GLOBAL['myVars'] = array();
 
Zuletzt bearbeitet:
Oder du machst ein Array als return-value

Mit extract kannst du das gut bewerkstelligen

PHP:
<?php
    function myFunction ($args){
        //dient nur als Beispiel für den Zugriff
        foreach($args as $key => $value){
            $args[$key] = $value + 1;    
        }
        return $args;
    }
    
    $var1 = 1;
    $var2 = 2;
    
    $args = array('var1' => $var1, 'var2' => $var2);
    extract(myFunction($args), EXTR_OVERWRITE);
    
    echo $var1."<br />";
    echo $var2;
?>
 
jupp, stimmt.
Ist relativ komplex gelöst mit der Klasse.

Übrigens ist es nicht sehr hübsch ausprogrammiert. Funktionen einer Klasse die gleich heissen wie properties verwirren.

Zudem hat ein kurzer Test ergeben, dass es mit mehreren Parametern nicht funktioniert

PHP:
$global_bar = "bar global";
$global_bar1 = "bar global1";
$foo = & new foo(&$global_bar, &$global_bar1);
$foo->bar = "new bar";
echo "global_bar:  ".$global_bar."</br>\n";   
echo "global_bar1:  ".$global_bar1."</br>\n";  

/** Ausgabe:
global_bar: new bar
global_bar1: bar global1
*/

Die restlichen User-Beispiele hab ich jetzt nicht genau angeschaut.
 
Zurück