这是让我的大脑受伤的原因。首先,我知道足够的PHP在大约5分钟内解释它。然而,我非常精通面向对象编程。情况:
我正在尝试构建一个php应用程序,用作仅限Intranet的工具。我的想法是将当前用户保存在会话中。我创建了一个数据库用户表的PHP模型。在代码中,我正在验证用户,如果用户进行身份验证,那么我正在创建一个User对象并将其保存在会话中。问题是创建了User对象,但所有属性都为null。我已经在这里和php网上研究了一些答案,并尝试了几件事,但问题仍然存在。我不认为这是与PHP相关的,我绝对认为这是我做错了但却无法指责它。以下是登录脚本中的相关代码示例。要到达这里密码必须验证,变量$users
是从我的数据库控制器中的函数直接返回。由于变量包含在var_dump
代码中,因此返回该变量可能不需要。我已经尝试将相关的数组元素分别传递给构造函数,我尝试传递完整的数组,我使用了serialize
和unserialize
。我尝试使用$this->property = $someValue
设置它们。
if ($hash) {
$current_user = new User($users);
$_SESSION['current_user'] = serialize($current_user);
$current_user = unserialize($_SESSION['current_user']);
var_dump(session_id());
var_dump($users);
var_dump($current_user);
var_dump($_SESSION['current_user']);
}
这是我的构造函数:
class User {
public $userid;
public $fname;
public $lname;
public $email;
public $username;
public $function;
public $d_joined;
public $is_internal;
public $is_active;
function __costruct() {
$arguments = func_get_args();
if (!empty($arguments)) {
foreach ($arguments[0] as $key => $property) {
if ($property_exists($this, $key)) {
$this -> {$key} = $property;
}
}
}
}
我已经尝试了_construct($args)
和
_construct(array($args))
而没有尝试。以下是var_dump()
调用
string 'cgotecrpu7soqvepoimjo2s116' (length=26)
array (size=1)
0 =>
array (size=20)
'userid' => string '1' (length=1)
0 => string '1' (length=1)
'fname' => string 'First Name' (length=4)
1 => string 'First Name' (length=4)
'lname' => string 'Last Name' (length=8)
2 => string 'Last Name' (length=8)
'email' => string 'email address' (length=21)
3 => string 'email address' (length=21)
'username' => string 'username' (length=9)
4 => string 'username' (length=9)
'password' => string 'hashed password:salt' (length=65)
5 => string 'hashed password:salt' (length=65)
'function' => string '4' (length=1)
6 => string '4' (length=1)
'd_joined' => string '2013-01-14' (length=10)
7 => string '2013-01-14' (length=10)
'is_internal' => string '1' (length=1)
8 => string '1' (length=1)
'is_active' => string '1' (length=1)
9 => string '1' (length=1)
object(User)[2]
public 'userid' => null
public 'fname' => null
public 'lname' => null
public 'email' => null
public 'username' => null
public 'function' => null
public 'd_joined' => null
public 'is_internal' => null
public 'is_active' => null
string 'O:4:"User":9{
s:6:"userid";N;
s:5:"fname";N;
s:5:"lname";N;
s:5:"email";N;
s:8:"username";N;
s:8:"function";N;
s:8:"d_joined";N;
s:11:"is_internal";N;
s:9:"is_active";N;}' (length=162)
从我所看到的,初始数组$users
具有正确的数据。 User
对象在变量$current_user
中创建。但是,当我尝试访问对象属性时,我收到有关从非对象访问对象属性的错误。看起来会话变量不是对象,但$current_user
是即使它具有null属性。有人能指出我正确的方向吗?感谢。
答案 0 :(得分:2)
你的构造函数对于你想做的事情看起来不对,我认为你应该这样做:
/**
* Constructor set each public values with the ones passed from the passed array
* @param array $userDatas Array containing the user datas
*/
function __construct($userDatas) {
foreach($userDatas as $key => $value) {
if (property_exists($this, $key)) {
$this->$key = $value;
}
}
}