Создать собственную переменную в стиле $_SESSION?

Я немного придирчив, но мне очень нравится легкость, с которой $_SESSION работает. Поэтому мне было интересно, есть ли способ заставить мои строки в базе данных работать таким образом. Мне было легко сделать суперглобальный, например, $_DATA['address'] вернет адрес, сохраненный в базе данных пользователя, который в данный момент вошел в систему. Очевидная проблема заключается в том, что когда я пишу что-то $_DATA['whatever'] это автоматически записало бы это в базу данных. Это было бы легко в C#, к чему я привык, но в PHP, похоже, нет нормальной функции get/set. Есть ли способ для меня, чтобы выполнить то, что я надеюсь сделать?

2 ответа

Вы можете создать класс и дать ему несколько статических вспомогательных функций.

Например:

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");

Вы можете использовать среду, подобную Yii, в которой есть классы, подобные CActiveRecord, которые отображаются на строки в базе данных.

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

Если вы сохраняете ссылку на объект, вы можете сохранять запись каждый раз, когда захотите.

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

Другие вопросы по тегам