почему мои переменные-члены объекта php становятся пустыми после их создания - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь сделать API в PHP.В этой части я запрашиваю свою базу данных и загружаю данные в объекты chuckquote, затем добавляю эти объекты в массив для кодирования в json и получения всякий раз, когда приложение отправляет запрос get.Когда я повторяю результаты запроса, все получается нормально, но если я повторяю идентификатор сразу после того, как он был создан, это что-то совершенно другое, и когда я кодирую массив, все равно 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 голосов
/ 17 февраля 2019

Удалите знак $ из имени свойства.От

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"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...