PHP - 无法使用数据实例化对象

时间:2016-04-12 15:06:55

标签: php

我正在学习PHP并构建一个简单的Web应用程序来保存\从数据库中获取数据。我构建了一个User类,我试图根据该类创建对象,并将相关参数传递给构造函数。我能够从数据库中检索数据,遵循几个指南,我仍然在前面收到一个空数组。

class User{
    protected $firstName;
    protected $lastName;
    protected $pass;

    function __construct($firstn,$lastn,$upass){
        $this->firstName = $firstn;
        $this->lastName = $lastn;
        $this->pass = $upass;
    }
   function setFname($first){
       $this->firstName = $first;
   }
   function setLname($last){
       $this->lastName = $last;
   }
   function setPass($pass){
       $this->pass = $pass;
   }

}

这是我创建user个对象并将它们推入数组的部分。

    if($stmt =mysqli_prepare($conn, $getUsersStatement)){
        mysqli_stmt_execute($stmt);
        mysqli_stmt_bind_result($stmt,$first,$last,$pass,$id);
        $resultArray = [];
        while(mysqli_stmt_fetch($stmt)){
//            $user = new User($first,$last,$pass);
            $user = new User($first,$last,$pass);
            $user->setFname($first);
            $user->setLname($last);
            $user->setPass($pass);
//                $user->lastName =$last;
//                $user->pass =$pass;
//            printf ("%s %s %s\n", $first, $last, $pass,$id); //this works and prints the data
            array_push($resultArray,$user);
        }
        /* close statement */
        echo (json_encode($resultArray));
        mysqli_stmt_close($stmt);
    }

这是输出:

[{},{},{},{},{},{},{}]

2 个答案:

答案 0 :(得分:3)

json_encode 不会显示您班级的任何受保护属性。如果您使用的是PHP 5.4+,则可以在课程中添加以下方法:

public function jsonSerialize()
{
    return get_object_vars($this);
}

并将定义更改为

class User implements JsonSerializable {

这将使编码器可以使用所有字段。

(或者作为更快的解决方案,请将您的字段设置为公开,但这并不是那么干净。)

答案 1 :(得分:0)

那是你的完整代码吗?您需要将获取的行绑定到变量,如下所示:

mysqli_stmt_bind_result($stmt, $first, $last, $pass);

请参阅http://php.net/manual/de/mysqli-stmt.fetch.php

如果你这样做:

$user = new User('MyFirstname','MyLastname','MyNotSecurePassword');
array_push($resultArray, $user);

它应该有用。检查您的$first$last$pass变量是否已设置!