可以说我正在存储一个名为的数组或对象$_SESSION["logged_in_user"]
.
如果我需要在整个脚本中反复引用它,以下哪项是"最佳实践"?
$_SESSION["logged_in_user"]
每次使用(即$_SESSION["logged_in_user"]["first_name"]
)?
将对象复制到一个新的变量,如$logged_in = $_SESSION["logged_in_user"]
?
创建对会话变量的引用,如 $logged_in =& $_SESSION["logged_in_user"]
我可能会过度思考这个,但我主要担心的是脚本开销和可读性.我不确定重复引用会话变量是否比引用内联声明的变量慢.我也不知道将会话变量复制到"常规"变量是否会增加必要的开销.我喜欢的可读性$logged_in["first_name"]
了$_SESSION["logged_in_user"]["first_name"]
.
那么这里有最好的做法,还是真的没关系?
$_SESSION
是一个特殊的PHP超全局数组.所以你在技术上可以随时使用它来引用它:
$_SESSION['logged_in_user']
Run Code Online (Sandbox Code Playgroud)
然而,它也很特别,因为它可以改变.以下示例使其可见:
$alias =& $_SESSION;
session_start();
$alias['foo'] = 'bar';
Run Code Online (Sandbox Code Playgroud)
此代码不会设置$_SESSION['foo']
.该$alias
指向先前$_SESSION
,session_start()
创造了一个新的会话.
如果您知道这些警告,您可以自然地创建自己的$_SESSION
抽象.
你不是在思考它......思想是好的!
我个人使用symfony 1.4来编码,这解决了这些问题,但你可能会选择保持精益:-)
我认为OO(面向对象).创建用户类.然后调用UserFactory :: getCurrentUser()或User :: getCurrentUser()之类的调用,它将返回当前登录的用户对象.该类的成员变量之一是user_id.但是,您将能够向该类添加附加功能和数据.
请记住,在OO中思考意味着使用非常接近问题域的抽象术语.用户,汽车,订单等.您不必具体,并且您不必在该类中包含所有可用信息,以使其"完整",无论是什么.仅包含您当时需要的数据(记住yagni).这些课是对具体的现实世界的幻想.就像3D建模是现实世界的幻觉一样.
希望有帮助......