Como desarrollador web, siempre estoy usando este enfoque a algo así como un formulario de acceso o de otro tipo “salvar” la operación (ignorando los peligros de las variables de entrada con el acceso directo):¿Hay alguna forma de acceder dinámicamente a un superglobal?
if (isset($_POST['action']) && $_POST['action'] == 'login')
{
// we're probably logging in, so let's process that here
}
para hacer que esto sea menos tedioso y manteniendo la coherencia con los principios seco (tipo de), cociné esto:
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
}
esta falla desgraciadamente, a pesar de mi uso oh-tan-inteligente de nombres de variables dinámicas para acceder a la superglobal.
Por lo tanto, estoy atascado utilizando esta fea:
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
}
Mi pregunta: ¿Existe una manera de acceder dinámicamente las variables superglobales que estoy tratando de hacer en mi segundo ejemplo de código? Si no, ¿hay una forma mejor/más eficiente de lograr lo que estoy haciendo en la tercera muestra de código?
Mi solución: Gracias a Tom Haigh's answer, aquí está el código final me voy con:
function isset_and_is ($superglobal, $key, $value)
{
$ref =& $GLOBALS['_' . strtoupper($superglobal)];
return isset($ref[$key]) && $ref[$key] == $value;
}
¿Y qué pasa con la primera muestra? – NullUserException
NullUserException: DRY :) –
IMO la primera muestra es más clara, más seca y fácil para cualquiera que conozca PHP. Mientras que los otros ... – NullUserException