首页 > 解决方案 > 为什么实例化后我的 php 对象成员变量为空?

问题描述

我正在尝试在 php 中创建一个 api。在这一部分中,我查询我的数据库并将数据加载到chuckquote 对象中,然后将这些对象添加到要以json 编码的数组中,并在应用程序发送获取请求时接收。当我回显查询结果时,一切都很好,但是如果我在它被实例化后立即回显 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"}]

标签: phparraysjsonobject

解决方案


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

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

推荐阅读