Dinamik bir superglobali erişmek için herhangi bir yolu var mı?

0 Cevap php

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;
}

0 Cevap