Создать собственную переменную в стиле $_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();
Если вы сохраняете ссылку на объект, вы можете сохранять запись каждый раз, когда захотите.