我有一些功能(粘贴在一小块功能下面),我用它作为单独的功能,效果很好。
现在我想将这个功能转移到某个类中。如您所见,它适用于$_SESSION
和$_COOKIE
。
问题是,在调用此函数时是否需要发送$_SESSION
和$_COOKIE
作为输入数据(我的意思是这样的:调用protect($_SESSION, $_COOKIE)
然后从函数内部获取它们)?或者它可以在不发送的情况下工作?
...
public function protect() {
session_start();
if (isset($_SESSION['HTTP_USER_AGENT'])) {
if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) {
$this->logout();
exit;
}
}
if (!isset($_SESSION['id']) && !isset($_SESSION['login'])) {
if (isset($_COOKIE['id']) && isset($_COOKIE['key'])) {
...
答案 0 :(得分:3)
$_COOKIE
和$_SESSION
是superglobals,这意味着它们随处可用。您永远不需要导入它们,将它们作为参数或类似的东西传递,它们始终可用于任何范围。
出于这个原因,他们应该始终被视为只读 - 为它们分配新值将影响每个范围内的其余脚本执行。
答案 1 :(得分:2)
$_SESSION
AND $_COOKIE
是超全球,意味着它们适用于所有范围。因此,将它们作为参数传递给函数并不是绝对必要的。
但是,在开始单元测试时,将它们作为参数传递是有好处的。通过参数,可以更轻松地测试函数的值,而无需在$_SESSION
或$_COOKIE
中使用它们。
答案 2 :(得分:1)
您不需要传递$_SESSION
或$_COOKIE
变量,因为它们是超级全局变量 - 可以从任何地方访问... from the docs:
这是一个“超全球”或自动全局变量。这仅仅意味着它在整个脚本的所有范围内都可用。没有必要做全局$变量;在函数或方法中访问它。