Hallo allerseits,
ich verfolge das Geschehen hier im Forum schon seit einiger Zeit still mit. Mit diesem
Thema werde ich euch eine Funktion zeigen, die ich geschrieben habe und fragen, ob
der eine oder andere Verbesserungsvorschläge oder dergleichen hat, da ich noch nicht allzu
viel Erfahrung mit der Materie habe (Ich habe bewusst nichts ins BS-Forum geschrieben, da
ein Ansatz ja da ist. Ich hoffe trotzdem, dass ich nicht das falsche Forum erwischt habe.).
Hier erstmal die Funktion (bisheriger Stand):
Meine Idee war es, eine Funktion zu schreiben, mit der ich mit möglichst wenig
Schreibaufwand Daten aus den Get- und/ oder Post- und/oder Cookie-Autoglobalen abrufen
und - falls keine gefunden werden konnten - mit Standardwerten belegen kann.
Todo: Ein optionaler vierter Parameter $type, der den erwarteten Typ (String, Integer, Boolean, usw.)
der abzurufenden Daten enthält. Durch Typumwandlung soll dann sichergestellt werden, dass die
abgerufenen Daten keinem anderen Typ entsprechen.
Funktionieren tut das Ganze. Ich habe die Funktion auch einem Benchmark unterzogen und bin
bei 333333 Iterationen auf stolze ~15 Sekunden gekommen. Aus diesem Grund habe ich nach
einer Alternativen gesucht und bin auf folgendes gestoßen, das bei den Benchmarks mit
~6 Sekunden zwar deutlich besser abschneidet, mir aber nicht so "elegant" wie die
erste Variante erscheint.
Ich würde mich über jede Meinung und jeden Vorschlag freuen.
ich verfolge das Geschehen hier im Forum schon seit einiger Zeit still mit. Mit diesem
Thema werde ich euch eine Funktion zeigen, die ich geschrieben habe und fragen, ob
der eine oder andere Verbesserungsvorschläge oder dergleichen hat, da ich noch nicht allzu
viel Erfahrung mit der Materie habe (Ich habe bewusst nichts ins BS-Forum geschrieben, da
ein Ansatz ja da ist. Ich hoffe trotzdem, dass ich nicht das falsche Forum erwischt habe.).
Hier erstmal die Funktion (bisheriger Stand):
PHP-Code:
function request($sources, $name, $presetting = NULL)
{
$request_sources = array('g' => $_GET, 'p' => $_POST, 'c' => $_COOKIE);
$sources = preg_split('//', $sources, -1, PREG_SPLIT_NO_EMPTY);
foreach ($sources AS $source) {
strtolower($source);
if (isset($request_sources[$source][$name])) {
if (is_array($request_sources[$source][$name])) {
foreach ($request_sources[$source][$name] AS $key => $value) {
$data[$key] = $value;
}
} else {
$data = $request_sources[$source][$name];
break;
}
} else {
$data = $presetting;
}
}
return $data;
}
Schreibaufwand Daten aus den Get- und/ oder Post- und/oder Cookie-Autoglobalen abrufen
und - falls keine gefunden werden konnten - mit Standardwerten belegen kann.
Todo: Ein optionaler vierter Parameter $type, der den erwarteten Typ (String, Integer, Boolean, usw.)
der abzurufenden Daten enthält. Durch Typumwandlung soll dann sichergestellt werden, dass die
abgerufenen Daten keinem anderen Typ entsprechen.
Funktionieren tut das Ganze. Ich habe die Funktion auch einem Benchmark unterzogen und bin
bei 333333 Iterationen auf stolze ~15 Sekunden gekommen. Aus diesem Grund habe ich nach
einer Alternativen gesucht und bin auf folgendes gestoßen, das bei den Benchmarks mit
~6 Sekunden zwar deutlich besser abschneidet, mir aber nicht so "elegant" wie die
erste Variante erscheint.
PHP-Code:
function request($sources, $name, $presetting = NULL) {
switch (strtolower($sources)) {
case 'g': $source = $_GET; break;
case 'p': $source = $_POST; break;
case 'c': $source = $_COOKIE; break;
case 'gp': case 'pg': $source = array_merge($_GET, $_POST); break;
case 'pc': case 'cp': $source = array_merge($_POST, $_COOKIE); break;
case 'gc': case 'cg': $source = array_merge($_GET, $_COOKIE); break;
}
if (isset($source[$name])) {
if (is_array($source[$name])) {
foreach ($source[$name] AS $key => $value) {
$data[$key] = $value;
}
} else {
$data = $source[$name];
}
} else {
$data = $presetting;
}
unset($source);
return $data;
}
EDIT:
Ich habe ein kleines Anwendungsbeispiel vergessen:
$username = request('gp', 'username', ''); Würde sowohl im Get- als auch im Post-Array nach dem Key 'username' suchen und diesen $username zuordnen. Falls keiner gefunden werden konnte, enthält $username eine leere Zeichenkette.
Ich würde mich über jede Meinung und jeden Vorschlag freuen.
Kommentar