Sie können es nicht ohne mühsame Anstrengungen tun. Ich würde vorschlagen, entweder eine Abfrage auf übliche Weise zu erstellen oder zu PDO zu wechseln, wenn Sie um jeden Preis nativ vorbereitete Anweisungen wünschen. Sie haben bindValue, wohlgemerkt
– Ihr gesunder Menschenverstand
31. Januar 2013 um 17:00 Uhr
Danke für die Information. Leider scheint PDO übertrieben zu sein, mit noch mehr Aufwand und Boilerplate, verglichen mit dem Schreiben meiner eigenen einfachen Sachen.
– ET
31. Januar 2013 um 17:02 Uhr
Für die einfachen Dinge können Sie eine Bibliothek aus meiner Benutzerinfo verwenden. Es ist aber wirklich einfach.
Zu Ewan Todds Kommentar:
Ich habe keine Kenntnis von der Basis-API, für die Sie den Wrapper erstellen, aber eine andere Alternative könnte darin bestehen, etwas mit Verkettungsfunktionen zu tun, damit Ihre resultierende Schnittstelle in etwa so aussieht:
Was ich der Verwendung von func_get_args vorziehen würde, da der Code wahrscheinlich besser lesbar ist und, was noch wichtiger ist, aufgrund des Fehlens einer Formatvariablen weniger wahrscheinlich Fehler verursacht.
Ich benutze func_get_args von Zeit zu Zeit. Es leidet darunter, dass es schwierig ist, auf einen Blick zu sehen, was die Eingaben der Methode sind. Außerdem fügt es einen Block mit hässlicher Syntax in Ihren Code ein. Ich würde diesen Ansatz nur als letzten Ausweg empfehlen. Bevorzugen Sie die Umgestaltung des Parameterobjekts.
– Ewan Todd
16. Oktober 2009 um 11:38 Uhr
Ich stimme Ihnen zu, dass es eine schlechte Art ist, variable Argumente zu verwenden. Ich habe meiner Antwort eine alternative Idee hinzugefügt
– Yacoby
16. Oktober 2009 um 11:56 Uhr
Ich mag den Vorschlag “Verkettungsfunktionen” besser als func_get_args. Ich kenne dieses Design als FLUENT-Schnittstelle. Dies wird erreicht, indem bindString(), bindDecimal() usw. “return $this;” ausführen. als ihre letzte Zeile. Die FLUENT-Schnittstelle ist eine großartige Option für bestimmte Arten von Fabriken.
– Ewan Todd
16. Oktober 2009 um 12:10 Uhr
Salvador Dalí
Früher sollten Sie verwendet haben func_get_args()aber in der php5.6können Sie verwenden … Operator.
So können Sie zum Beispiel die Funktion schreiben, die Ihnen eine Summe aller Zahlen zurückgibt, die an die Funktion gesendet werden:
function bind_param(...$params){
var_dump($params);
}
Dein params ist eigentlich ein Array aller Elemente.
Wenn Sie PHP 5.6 oder eine neuere Version verwenden, können Argumentlisten die enthalten ... Token, um anzugeben, dass die Funktion eine variable Anzahl von Argumenten akzeptiert. Die Argumente werden als Array an die angegebene Variable übergeben; Einfach nutzen ... Sie können auf unbegrenzte Variablenargumente zugreifen.
Wenn Sie diese Funktion umschließen möchten, müssen Sie sie übergeben Verweise zu den ursprünglichen Argumentvariablen zur Funktion bind_param. Ich glaube nicht, dass func_get_args() Ihnen das gibt, es gibt Ihnen stattdessen Werte. Daher ist es nicht möglich, diese zu verwenden, um an die übergeordnete Funktion zu übergeben. Ich hatte mit einem ähnlichen Problem zu kämpfen, als ich versuchte, mysqli_stmt zu erweitern, und kam nie zu einer zufriedenstellenden Lösung.
Dies ist leider nicht wirklich eine Antwort auf Ihre Frage, sondern nur eine Warnung, dass andere Argumente in Ihrer speziellen Anwendung einer beliebigen Anzahl von Argumenten möglicherweise nicht funktionieren.
In der Tat. Als ich das letzte Mal nachgesehen habe (vor mehr als einem Jahr), gab es keine Möglichkeit zum Wickeln/Verlängern bind_param() da func_get_args() gibt keine Referenzen zurück.
– Josh Davis
16. Oktober 2009 um 13:50 Uhr
Ewan Tod
Bei 5 Parametern beginnt dieses Design das AntiPattern “Zu viele Parameter“. Dies schlägt das sogenannte Refactoring vor Parameterobjektein Objekt oder eine Struktur mit Datenelementen, die die zu übergebenden Argumente darstellen. Vermeiden Sie es jedoch, es zu einem zu machen Magischer Behälter.
In der Tat. Als ich das letzte Mal nachgesehen habe (vor mehr als einem Jahr), gab es keine Möglichkeit zum Wickeln/Verlängern bind_param() da func_get_args() gibt keine Referenzen zurück.
– Josh Davis
16. Oktober 2009 um 13:50 Uhr
Ólafur Waage
Es gibt eine Funktion namens func_get_args() Dies ist ein Array aller Argumente, die an die Funktion übergeben werden.
Beispiel von PHP.net
function foo()
{
$numargs = func_num_args();
echo "Number of arguments: $numargs<br />\n";
if ($numargs >= 2) {
echo "Second argument is: " . func_get_arg(1) . "<br />\n";
}
$arg_list = func_get_args();
for ($i = 0; $i < $numargs; $i++) {
echo "Argument $i is: " . $arg_list[$i] . "<br />\n";
}
}
foo(1, 2, 3);
Sie können es nicht ohne mühsame Anstrengungen tun. Ich würde vorschlagen, entweder eine Abfrage auf übliche Weise zu erstellen oder zu PDO zu wechseln, wenn Sie um jeden Preis nativ vorbereitete Anweisungen wünschen. Sie haben bindValue, wohlgemerkt
– Ihr gesunder Menschenverstand
31. Januar 2013 um 17:00 Uhr
Danke für die Information. Leider scheint PDO übertrieben zu sein, mit noch mehr Aufwand und Boilerplate, verglichen mit dem Schreiben meiner eigenen einfachen Sachen.
– ET
31. Januar 2013 um 17:02 Uhr
Für die einfachen Dinge können Sie eine Bibliothek aus meiner Benutzerinfo verwenden. Es ist aber wirklich einfach.
– Ihr gesunder Menschenverstand
31. Januar 2013 um 17:11 Uhr