为什么我的php对象成员变量实例化后为null?

时间:2019-02-17 20:37:14

标签: php arrays json object

我正在尝试在php中创建一个api。在这一部分中,我查询数据库并将数据加载到chuckquote对象中,然后将这些对象添加到要用json编码的数组中,并在应用程序发送get请求时接收。 当我回显查询结果时,一切都很好,但是如果我在实例化ID之后立即回显ID,则其完全不同,在对数组进行编码时,所有内容均为NULL,现在有第5个空白行包含日期。我该如何解决这个问题,或者至少我在这里做错了什么?

    if($method == "GET")
    {

    $sql = "SELECT * FROM chuckquotes";
    $result = $conn->query($sql);

    if ($result->num_rows > 0)
    {

      while($row = $result->fetch_assoc())
      {
        //echo " " . $row["ID"] . " " . $row["quote"] . " " . $row["author"] . " " . $row["datentime"] . " " ;
        $crow = new chuckquote;

        echo $crow->$id = $row["ID"];
        $crow->$quote = $row["quote"];
        $crow->$author = $row["author"];
        $crow->$date = $row["datentime"];


        $Jsonarray[] = $crow;


      }

      echo json_encode($Jsonarray);

    }
    else
    {
      echo "0 results";
    }

    $conn->close();

    }

班级

  class chuckquote
    {
      public $id;
      public $quote;
      public $author;
      public $date;
    }

输出:

[{"id":null,"quote":null,"author":null,"date":null,"":"2019-02-17 06:47:13"},{"id":null,"quote":null,"author":null,"date":null,"":"2019-02-17 06:47:13"},{"id":null,"quote":null,"author":null,"date":null,"":"2019-02-17 06:47:13"},{"id":null,"quote":null,"author":null,"date":null,"":"2019-02-17 06:47:13"}]

1 个答案:

答案 0 :(得分:1)

从属性名称中删除$符号。来自

echo $crow->$id = $row["ID"];
$crow->$quote = $row["quote"];
$crow->$author = $row["author"];
$crow->$date = $row["datentime"];

$crow->id = $row["ID"];
$crow->quote = $row["quote"];
$crow->author = $row["author"];
$crow->date = $row["datentime"];

在php中,访问类属性时无需使用$符号。

尽管最好的做法是为此任务创建一个构造函数。带有构造函数的示例类。

class chuckquote
{
    public $id;
    public $quote;
    public $author;
    public $date;

    /**
     * chuckquote constructor.
     * @param $id
     * @param $quote
     * @param $author
     * @param $date
     */
    public function __construct($id, $quote, $author, $date)
    {
        $this->id = $id;
        $this->quote = $quote;
        $this->author = $author;
        $this->date = $date;
    }
}

然后您可以在实例化类时分配值。

$crow = new chuckquote($row["ID"], $row["quote"], $row["author"], $row["datentime"]);