PHP: $ _GET и $ _POST в функциях? - PullRequest
       13

PHP: $ _GET и $ _POST в функциях?

7 голосов
/ 30 августа 2009

Я поражен кодом, в котором GET-значения, такие как $_GET['username'], не включены в качестве параметров в функции.

Когда вам нужно включить методы POST и GET в качестве параметров для функций?

Ответы [ 3 ]

27 голосов
/ 30 августа 2009

Когда вам нужно включить POST и получить методы в качестве параметров для функции?

Я бы сказал «никогда»: $_GET и $_POST - это то, что называется суперглобальными : они существуют во всем сценарии; это означает, что они существуют внутри функций / методов.

Особенно, вам не нужно ключевое слово global для них.


Тем не менее, полагаться на них в своих функциях / методах - довольно плохая практика: ваши функции / методы обычно не должны зависеть от того, что не передано в качестве параметра.

Что я имею в виду; рассмотрим эти две функции:

function check_login_password()
{
    $login = $_GET['login'];
    $password = $_GET['password'];
    // Work with $login and $password
}

и

/**
 * Check login and password
 * 
 * @param $login string
 * @param $password string
 * @return boolean
 */
function check_login_password($login, $password)
{
    // Work with $login and $password
}

ОК, с первым вам не нужно передавать два параметра ... Но эта функция не будет независимой и не будет работать в любой ситуации, когда вам нужно будет проверить пару логин / пароль, которые не приходит с $_GET.

Со второй функцией вызывающая сторона отвечает за передачу правильных параметров; это означает, что они могут прийти откуда угодно: функция всегда сможет выполнить свою работу.

1 голос
/ 30 августа 2009

$ _ GET и $ _POST являются глобальными переменными. У них есть ценности, а не методы. Это их значения, которые вы хотите отправить функциям, и классы / функции, как правило, не должны знать ничего за их пределами, например, откуда поступают данные. Многие используют ярлык использования глобальных переменных в функциях и таким образом ограничивают удобство использования их функций.

0 голосов
/ 30 августа 2009

Вам не нужно отправлять их в качестве параметров функции, поскольку они являются глобальными переменными (доступны везде в коде).

Но всегда полезно отфильтровать и проверить их, прежде чем использовать их в своем коде.

...