【问题标题】:why are my php object member variables null after instantiating them?为什么实例化后我的 php 对象成员变量为空?
【发布时间】:2019-02-17 20:37:14
【问题描述】:

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

【问题讨论】:

  • 开启显示警告/错误,去掉回显echo $crow->$id = $row["ID"];,将$crow->$quote = $row["quote"];改为$crow->quote = $row["quote"];
  • 是的,我不小心把第一部分留在了测试中.. 但这是删除 $ 工作的问题。谢谢!
  • echo "0 results"; ...如果您要在有 结果时输出 JSON,那么在没有结果时也回显 JSON 是有意义的。这样,客户端以一致的格式获得一致的响应。事实上,在返回列表的情况下,指示 0 结果的最佳方法是简单地返回一个空数组。然后,您按原样传送纯数据。然后由客户决定如何处理。

标签: php arrays json object


【解决方案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"]);

【讨论】:

  • 移除回声也是有意义的。似乎没有必要,并且会导致任何尝试将整个响应解析为 JSON 的操作失败
  • 我猜他是用它来调试的。虽然这是一种不好的做法。
  • 没错,所以需要删除
  • 我删除了回声。还添加了一个使用构造函数赋值的例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 2019-06-06
  • 2011-03-24
相关资源
最近更新 更多