PHP子变量

时间:2013-09-06 19:00:02

标签: php

我目前正在使用会话变量来存储用户信息,但我想更改它以便于编码变量,如$ user-> username

变量即时使用:

$_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

3 个答案:

答案 0 :(得分:7)

只需将数组转换为对象:

$user = (object) $_SESSION;

来自documentation on objects

  

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

答案 1 :(得分:0)

这可能不是处理此问题的最佳方法,但它很容易解决数组问题。

  • 注意:你真的应该避免使用superglobals和ESPECIALLY Session来存储任何类型的用户数据。这些信息很容易从计算机上获取,并可能危及您的网站和用户。

    类记录{     $数据;

    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 = new Record($ _ SESSION); echo $ user-> username;

答案 2 :(得分:0)

我建议用mapper创建一个对象

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

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