0

我目前使用会话变量来存储用户信息,但我想将其更改为便于编码为 $user->username 等变量

变量 im 使用:

$_SESSION['username']
$_SESSION['email']
$_SESSION['firstname']
$_SESSION['lastname']
$_SESSION['ip']
$_SESSION['level']
$_SESSION['subscriber']

我想使用的变量:

$user->username
$user->email
$user->firstname
$user->lastname
$user->ip
$user->level
$user->subscriber
4

3 回答 3

7

只需将数组转换为对象:

$user = (object) $_SESSION;

关于对象的文档中

数组转换为具有由键命名的属性和相应值的对象。对于任何其他值,名为 scalar 的成员变量将包含该值。

于 2013-09-06T19:02:20.870 回答
0

这可能不是处理此问题的最佳方法,但它是处理数组的简单方法。

  • 注意:你真的应该避免使用超全局变量,尤其是 Session 来存储任何类型的用户数据。这些信息很容易从计算机上获取,并且可能会危及您的站点和用户。

    类记录 { $data;

    public function __construct(array $data) {
        $this->data = $data;
    }
    
    public function __get($name) {
        return $this->data[$name];
    }
    
    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
    

    }

    $user = 新记录($_SESSION); 回声$用户->用户名;

于 2013-09-06T19:03:49.287 回答
0

我建议用映射器创建一个对象

 class User {
       public $username;
       public $name;
       public $firstName;
       public $lastName;
       public $ip;
       public $level;
       public $subscriber;

      // add methods that would be useful on a user manipulating the above values;
      public static function createUserFromArray($array){
            $user = new User();
            $user->username = $array["username"];
            $user->name = $array["name"];
            $user->firstName = $array["firstName"];
            $user->lastName = $array["lastName"];
            $user->ip = $array["ip"];
            $user->level = $array["level"];
            $user->subscriber = $array["subscriber"];
            return $user;
      }
 }

然后,当您想从存储的会话数据创建用户时,您只需使用:

 $user = User::createUserFromArray($_SESSION);

这将允许您从任何适当的数组中获取用户,这可以是会话或数据库结果行或数组文字。

于 2013-09-06T19:15:49.860 回答