Come sviluppatore web, sto utilizzando sempre questo approccio per qualcosa di simile a un modulo di accesso o di altri “Salva” operazione (ignorando i pericoli di variabili di input che accedono direttamente):C'è un modo per accedere dinamicamente ad un superglobale?
if (isset($_POST['action']) && $_POST['action'] == 'login')
{
// we're probably logging in, so let's process that here
}
per rendere questo meno noioso e in linea con i principi secco (o quasi), ho cucinato questo in su:
function isset_and_is ($superglobal, $key, $value)
{
$ref = '_' . strtoupper($superglobal);
return isset($$ref[$key]) && $$ref[$key] == $value;
}
if (isset_and_is('post', 'action', 'login'))
{
// we're probably logging in, so let's process that here
}
questo fallisce miseramente, nonostante il mio uso oh-così-intelligente di nomi di variabili dinamiche per accedere al superglobale.
Così, mi sono bloccato con questo brutto:
function isset_and_is ($superglobal, $key, $value)
{
switch (strtoupper($superglobal))
{
case 'GET': $ref =& $_GET; break;
case 'POST': $ref =& $_POST; break;
case 'REQUEST': $ref =& $_REQUEST; break;
default: die('megafail'); return;
}
return isset($ref[$key]) && $ref[$key] == $value;
}
if (isset_and_is('post', 'action', 'login'))
{
// we're probably logging in, so let's process that here
}
La mia domanda: Esiste un modo per accedere in modo dinamico le variabili superglobali come sto tentando di fare nel mio secondo esempio di codice? Se no, c'è un modo migliore/più efficace per realizzare ciò che sto facendo nel terzo codice di esempio?
La mia soluzione: Grazie a Tom Haigh's answer, ecco il codice finale io vado con:
function isset_and_is ($superglobal, $key, $value)
{
$ref =& $GLOBALS['_' . strtoupper($superglobal)];
return isset($ref[$key]) && $ref[$key] == $value;
}
E cosa c'è che non va nel primo campione? – NullUserException
NullUserException: DRY :) –
IMO il primo campione è più chiaro, DRYer e facile per chiunque conosca PHP. Mentre gli altri ... – NullUserException