Ошибка вложенных классов

0

Я пытаюсь вставить класс внутри другого класса в PHP и отобразить данные через HTML. У меня есть класс вопросов, и внутри этого класса я создаю объект User. Пользовательский объект содержит информацию для пользователя, создавшего вопрос. По какой-то причине я получаю "(!) Неустранимая ошибка: не удается получить доступ к частной собственности Question :: $ user" в моем выпуске. Ничто из того, что я могу сказать, не является частным, что мешает мне извлекать данные. Вот немного кода:

class Question extends Model {
    private $user;
    private $content;
    private $title; 
    private $tags;
    private $date;
public function __construct($user, $content, $title, $tags, $date) {
    parent::__construct();
    $this -> setUser($user);
    $this -> setContent($content);
    $this -> setTitle($title);
    $this -> setTags($tags);
    $this -> setDate($date);
}

public function getUser() {
    return $this -> user;
}

public function setUser($user) {
    $this -> user = User::findUser($user);
    return $this;
}

Тогда это мой класс User:

class User extends Model {
    private $email;
    private $password; 
    private $fname;
    private $lname;

    public function __construct($email, $password, $fname, $lname) {
        parent::__construct();
        $this -> setEmail($email);
        $this -> setPassword($password);
        $this -> setFname($fname);
        $this -> setLname($lname);
    }

Функции, которые создают вопрос и пользовательские объекты, следующие:

private static function makeQuestionFromRow($row) {
        $question = new Question($row['user_id'], $row['quest_Content'], $row['quest_Title'], $row['quest_Tags'], $row['quest_DatePosted']);
        $question -> id = $row['quest_ID'];
        return $question;
    }

private static function makeUserFromRow($row) {
        $user = new User($row['user_email'], $row['user_pwd'], $row['user_fname'], $row['user_lname']);
        $user -> id = $row['user_id'];
        return $user;
    }

И оба являются подклассами модели:

class Model {
    protected $id;

    public function __construct() {

    }

    public function getId() {
        return $this -> id;
    }

Я пытаюсь отобразить имя пользователя и фамилию пользователя и сделать ссылку на страницу пользователя, которая просматривает информацию пользователя. Поэтому мой код для этого:

<b>Date Posted: </b>{{date("m/d/Y", strtotime($question->getDate()))}} by <a href="@@user/view/{{$question->user->getId()}}@@"> TEST</a> <br /><br />

Код даты получается корректным, однако идентификатор пользователя не выдается и ссылка на "тест" выше. Я не уверен, что я делаю что-то синтаксис неправильно или что. Если бы кто-то помог мне, я был бы признателен.

Это домашнее задание. Не пытаясь справиться с кем-либо. Еще раз спасибо.

  • 0
    @@ для ссылки - это символ подстановки, который позволяет мне использовать относительную ссылку, а квадратные скобки заменяются на <php? так что я могу разбросать PHP по HTML ... это часть MVC, которую мы должны использовать для класса. Просто к вашему сведению ...
Теги:
class
private

1 ответ

1
Лучший ответ

Вместо вызова $question->user в вашем шаблоне вам нужно вызвать $question->getUser(). Узнайте больше о видимости в PHP для получения дополнительной информации.

  • 0
    Пользователь в этом случае является объектом. Мне нужен один кусок данных внутри этого вложенного объекта под названием «id». Когда я делаю изменения, которые вы предложили, я теперь получаю сообщение об ошибке "(!) Catchable fatal error: объект класса User не может быть преобразован в строку в ...", так что внутри класса пользователя есть идентификатор переменной , который находится внутри класса вопроса, который мне нужен для доступа. Имеет ли это смысл?
  • 0
    Да, мой ответ остается в силе. Вы не можете ссылаться на ->user вне класса, потому что это личное. Ошибка в вашем шаблоне.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню