2015-03-25 4 views
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

@@ для ссылки - это подстановочный знак, который позволяет мне использовать относительную ссылку, а скобки заменяются на jjmil03

ответ

1

Вместо того чтобы звонить в ваш шаблон $question->user, вам необходимо позвонить по телефону $question->getUser(). Подробнее о visibility in PHP.

+0

Пользователь в этом случае является объектом. Мне нужен один фрагмент данных внутри этого вложенного объекта с именем «id». Когда я вношу изменения, которые вы предложили, теперь я получаю сообщение об ошибке «(!) Catchable fatal error: Объект класса Пользователь не может быть преобразован в строку в ...» Таким образом, внутри переменной есть идентификатор переменной класс пользователя, который находится внутри класса вопросов, к которому я должен получить доступ. Имеет ли это смысл? – jjmil03

+0

Да, мой ответ все еще стоит. Вы не можете ссылаться на '-> user' вне класса, потому что он является приватным. Ошибка в вашем шаблоне. – Evert

+0

Тогда я не уверен, как это сделать? Метод getID() является общедоступным методом внутри класса методов, который используется классом пользователя. Тогда я не понимаю, как получить что-либо внутри объекта пользователя с вашим предложением выше, потому что когда я это делаю, я получаю сообщение об ошибке. – jjmil03

Смежные вопросы