php 超全局变量 出错,您是否认为PHP中的错误形式是在类方法中访问超级全局变量?...

以类帐户中的示例login()函数为例.

class Account {

/* Class variables */

public function login() {

if(isset($_POST['username']) && isset($_POST['password']))

return $this->_formLogin();

else if(isset($_SESSION['accountId']))

return $this->_sessionLogin();

else if(isset($_COOKIE['username']) && isset($_COOKIE['password']))

return $this->_cookieLogin();

else return false;

}

private function _formLogin() {

//perform login actions using $_POST data

}

/* All that other stuff */

}

试着忽略对数据清理,密码腌制等看不见的方法的任何担忧.严格注重登录(),这是全球访问坏juju?我通常避免在类中使用PHP超级全局变量,但我想不出在这种情况下不这样做的好理由.

我可以理解为什么你不希望魔术在背景中与全局变量跨类交互,但是这些全局变量是内置在PHP中的,不会被类修改,只能由这个类使用.

这将导致您需要用户登录的页面的开头:

$user = new Account($whatever, $objects, $we, $depend, $on);

if($user->login()) {

//Do this stuff when logged in

}

而不是每个页面上的这个,其逻辑可能需要在以后更改:

$user = new Account($whatever, $objects, $we, $depend, $on);

if(isset($_POST['username']) && isset($_POST['password']))

$user->formLogin($_POST['username'], $_POST['password']);

else if(isset($_SESSION['accountId']))

$user->sessionLogin($_SESSION['accountId']);

else if(isset($_COOKIE['username']) && isset($_COOKIE['password']))

$user->cookieLogin($_COOKIE['username'], $_COOKIE['password']);

if($user->isLoggedIn() {

//Do this stuff when logged in

}

虽然我知道在类之外创建一个函数来处理它是一个选项,这不会像在类中混淆全局变量一样糟糕吗?

解决方法:

我不会说这个答案是肯定的或没有答案.这个想法(与所有超级全局$_GET $_POST $_SESSION一起)是您要求的数据位于整个应用程序中,而不是您要求的范围本地.

这些超级全球可能会发生的事情是,如果他们在你的功能执行期间因某种原因而在某处或者(上帝保佑)改变了.这可能会成为一个非常恼人的错误重现.

所以我会说这是糟糕的形式.

标签:php,oop,session,login,superglobals

来源: https://codeday.me/bug/20190713/1448669.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值