PHP:函数中的$ _GET和$ _POST?

9

我对代码感到惊讶,其中GET值(例如$_GET['username'])未作为函数的参数包含。

什么时候需要将POST和GET方法作为函数的参数包含?


3
你的真正问题是什么?唯一有问号(虽然有瑕疵)的句子并没有任何意义。 $_GET和$_POST是全局变量,它们可以在任何地方使用。这是良好的编码实践吗?也许是,也许不是。 - X-Istence
3个回答

30

什么时候需要将POST和GET方法作为参数传递给函数?我会说“从不”:$_GET和$_POST被称为superglobals:它们存在于整个脚本中,这意味着它们存在于函数/方法内部。特别是,你不需要在其中使用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

$_GET和$_POST是全局变量。它们具有值,而不是方法。

你想要发送到函数的是它们的值,类/函数通常应该不知道任何外部数据来源的情况。许多人在函数中使用全局变量的快捷方式,从而限制了其函数的可用性。


公平地说,它可能指的是HTTP 方法 GETPOST(尽管问题有点混淆)。 - Peter Mortensen

0

你不需要将它们作为函数参数发送,因为它们是全局变量(在代码的任何地方都可以访问)。

但在使用它们之前,过滤和验证它们总是一个好习惯。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接