创建自己的类似$ _SESSION的变量?

时间:2013-07-07 00:54:59

标签: php superglobals

这是我有点挑剔,但我真的很喜欢$_SESSION的工作轻松。所以我想知道是否有办法让我在数据库中使用这样的行。我很容易创建一个超全局,例如$_DATA['address']将返回当前登录用户数据库中保存的地址。显而易见的问题是,当我自动向$_DATA['whatever']写入内容时会把它写入数据库。这在C#中很容易,我习惯了,但在PHP中似乎没有正常的get / set功能。我有什么方法可以完成我希望做的事情吗?

2 个答案:

答案 0 :(得分:1)

您可以创建一个类并为其提供一些静态辅助函数

例如:

class CurrentUser {

     protected static $currentUser;
     protected static function getCurrentUser(){
          if (!static::$currentUser){
                // get the current user from db and assign it to the currentUser Property
          }
          return static::$currentUser;
     }
     public static function get($property){
          return isset(static::getCurrentUser()->$property)?static::$currentUser->$property:null;
     }

     public static function set($property, $value){
          // make sure we have the current user
          $user = static::getCurrentUser();
          if ($user){
               $user->$property = $value;
               // save the user to the database.
          }
     }
}

要使用,那么你只需说

echo CurrentUser::get("address");

echo CurrentUser::set("address", "123 anystreet, anytown US 12345");

答案 1 :(得分:0)

你可以使用像Yii这样的框架,它有像CActiveRecord这样的类,可以映射到数据库中的行。

$u = User::model()->findByPk(1);
$u->username = "fred";
$u.save();

如果您保留对该对象的引用,则可以在每次需要时保存该记录。

http://www.yiiframework.com/doc/api/1.1/CActiveRecord