2015-03-25 106 views
0

我想在PHP中嵌套另一个类中的类,并通过HTML显示数据。我有一个问题类,并在该类内创建一个用户对象。用户对象包含创建问题的用户的信息。出于某种原因,我在输出中收到“(!)致命错误:无法访问私有属性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; 
} 

那么这是我的用户等级:

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 /> 

日期代码出来正确,但用户id不出来,并链接到“测试”上面。我不确定我是否在做某些语法错误的或什么。如果有人能帮助我,我会很感激。

这是作业。不要试图克服任何人。再次感谢。

+0

链接的@@是一个通配符,它​​允许我使用相对链接,括号被替换为 jjmil03 2015-03-25 04:21:40

回答

1

您不需要在模板中调用$question->user,您需要致电$question->getUser()。了解更多信息,请参阅visibility in PHP

+0

在这种情况下,用户是一个对象。我需要一个名为“id”的嵌套对象中的一段数据。当我做出你建议的改变时,我现在得到一个错误,说“(!)可捕捉的致命错误:类用户的对象无法转换为字符串...” 所以有一个变量id用户类,它位于问题类的内部,需要访问。那有意义吗? – jjmil03 2015-03-25 04:39:54

+0

是的,我的答案依然存在。你不能在课堂外引用' - > user',因为它是私人的。错误在你的模板中。 – Evert 2015-03-25 05:11:50

+0

然后我不确定如何引用它?方法getID()是Method类中的一个公共方法,由User类使用。我不明白如何使用上面的建议来获取用户对象中的任何内容,因为当我这样做时,我收到一个错误。发布 – jjmil03 2015-03-25 05:29:20