我有三个类MainClass,Member和Project。成员和项目扩展了MainClass。
首先,我创建一个MainClass对象,然后创建一个Member对象并执行setMember函数:
$mainclass = new MainClass();
$member = new Member($id);
$mainclass->setMember($member);
当$ member变量设置为当前成员时,我想在我的Project类中使用此变量,但我无法使其工作:s
我需要会员的身份证,所以理论上有两种可能性:
mysql_query("INSERT INTO projects (title, user_id) VALUES('$title', ".$this->member->id.")");
或
mysql_query("INSERT INTO projects (title, user_id) VALUES('$title', ".$this->member->getId().")");
第一个,$ this-> member-> id,结果为NULL
第二个,$ this-> member-> getId(),给我这个错误:
在a上调用成员函数getId() ......中的非对象。
这是我的课程(我剥夺了大部分的课程)
class MainClass{
public $member = NULL;
public function __construct(){}
public function setMember($member)
{
$this->member = $member;
}
public function getMember()
{
return $this->member;
}
}
class Project extends MainClass{
public $id;
public function __construct($id=NULL){
$this->setId($id);
}
public function setId($id){
$this->id = $id;
}
public function getId(){
return $this->id;
}
public function addProject($title){
mysql_query("INSERT INTO projects (title, user_id) VALUES('$title', ".$this->member->getId().")");
}
}
class Member extends MainClass{
public $id;
public function __construct($id=NULL){
$this->setId($id);
}
public function setId($id){
$this->id = $id;
}
public function getId(){
return $this->id;
}
}
答案 0 :(得分:2)
退一步看看你班级之间的关系。在您的数据库中,项目“有一个”成员(或数据库中的“用户”)。
您的类实现不反映这种关系。 MainClass“有一个”会员,但Project没有。您正在使用基类的成员来创建此关系。
除非MainClass中的$ member是静态的,否则Project的一个实例无法看到MainClass的另一个实例为它设置了什么,因为它们是单独的实例。我不建议将$ member设为static,因为你基本上就像使用全局变量一样使用它。
就像我说的那样,退一步看看关系。它们通常是否遵循数据库模式中的关系?为什么会员和项目来自MainClass?他们的共同行为是什么?
我意识到我提出的问题比我回答的要多,但我的直觉反应是,这个特殊的技术问题不是你真正的问题 - 这是你的课堂设计需要重新考虑一点。
希望有所帮助。
答案 1 :(得分:0)
您应该创建MainClass
的实例,而不是创建Project
的实例。
$mainclass = new Project();
$member = new Member($id);
$mainClass->setMember($member);
答案 2 :(得分:0)
您有两个孩子延伸父母,但子课程不能互相“看到”私人或公共。您需要将数据导入Project类。