0

我有三个类 MainClass、Member 和 Project。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(),给了我这个错误:

在...中的非对象上调用成员函数 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;
    }       
}
4

3 回答 3

2

退后一步,看看你的类之间的关系。在您的数据库中,一个项目“有一个”成员(或数据库中的“用户”)。

您的类实现不反映这种关系。MainClass “有一个”成员,但 Project 没有。您正在使用基类的成员来创建这种关系。

除非 MainClass 中的 $member 是静态的,否则 Project 的实例无法看到 MainClass 的另一个实例为其设置了什么,因为它们是单独的实例。我不建议将 $member 设为静态,因为您基本上会将它用作全局变量。

就像我说的,退后一步,看看关系。他们通常遵循您的数据库模式中的关系吗?为什么 Member 和 Project 派生自 MainClass?他们的共同行为是什么?

我意识到我问的问题比我回答的要多,但我的直觉反应是这个特定的技术问题不是你真正的问题——你的类设计需要重新思考一下。

希望有帮助。

于 2009-07-14T17:11:52.853 回答
0

您有两个孩子扩展父母,但孩子们不能“看到”彼此私人或公共。您需要将数据导入到 Project 类中。

于 2009-07-14T16:31:52.293 回答
0

MainClass您应该创建 的实例,而不是创建 的实例Project

$mainclass = new Project();
$member = new Member($id);
$mainClass->setMember($member);
于 2009-07-14T16:15:02.950 回答