我正在学习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);
}
这是输出:
[{},{},{},{},{},{},{}]
答案 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
变量是否已设置!