when to use '@' before in a super global variable in object oriented php?
在函数内部,我想返回一个超全局变量。它显示未定义。但当我在这个超级全局变量之前使用"@"时,它就完成了。我想知道"@"的实际用法。
下面是我的代码
1 2 3 | public function getSession(){ return $_SESSION['login']; } |
你看的不对。
您不应该从类内访问php superglobals。相反,在代码的引导阶段创建实例时,应该将它们用作参数:
1 2 3 4 | $request = new Request( $_POST, $_GET, new Session($_SESSION) ); |
有点像这样。
然后将这个
- 能够在运行时控制和更改感知的用户输入,并影响全局范围(在使用遗留代码库的情况下,其中部分代码仍然基于面向包含的编程)
- 能够独立于Web服务器测试代码
在PHP中使用
一个很好的例子是,如果您正在编写面向对象的代码,并且您想要一个干净的对象API,在出现问题时抛出异常。你在设计你的类,你的对象执行,比如说,一个
1 |
在这里为
你为什么要这么做?因为php是一个愚蠢的混合函数,在相互比较时没有相似性或标准。
对于您的具体示例(与
这可以归结为:
"When is it okay to use
@ ?"
答案是:实际上从来没有。
使用
首先,没有必要仅仅因为一个超级的全球性的东西就归还一个超级的gloab。
1 2 3 | public function Foo(){ $_SESSION['login'] .= $_SESSIN['login'] ." blah blah"; } |
很好。