Bir web geliştiricisi olarak, ben her zaman bir giriş formunun veya diğer "tasarruf" operasyonu (doğrudan girdi değişkenleri erişim tehlikeleri göz ardı ediliyor) gibi bir şey bu yaklaşımı kullanıyorum:
if (isset($_POST['action']) && $_POST['action'] == 'login')
{
// we're probably logging in, so let's process that here
}
(Çeşit), bu daha az sıkıcı ve KURU ilkeleri doğrultusunda tutarak yapmak için, ben bu kadar pişirilir:
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
}
Bu superglobali erişmek için dinamik değişken adları benim oh-so-akıllı kullanılmasına rağmen, sefil başarısız olur.
Yani, ben bu çirkin kullanarak şaşırıp:
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
}
My question: benim ikinci örnek kod yapmak için çalışılıyor gibi dinamik superglobal değişkenleri erişmek için bir yolu var mı? Hayır, ben üçüncü kod örneğinde yapıyorum ne başarmak için daha iyi / daha etkili bir yolu var mı?
My solution: Tom Haigh's answer, burada ben gidiyorum son kod sayesinde:
function isset_and_is ($superglobal, $key, $value)
{
$ref =& $GLOBALS['_' . strtoupper($superglobal)];
return isset($ref[$key]) && $ref[$key] == $value;
}