Uzanan sınıfta ana değişkenler kullanma

3 Cevap php

Ben üç sınıf MainClass Üye ve Proje var. Üyesi ve Proje MainClass uzatmak.

Önce sonra üye nesne bir MainClass nesnesi oluşturmak ve fonksiyon setMember yürütmek:

$mainclass = new MainClass();
$member = new Member($id);
$mainclass->setMember($member);

$ Üye değişken akım üyesi ayarlandığında benim Projesi sınıfta bu değişkeni kullanmak istiyveyaum ama o iş için alınamıyveya: s

Teveyaide iki olasılık vardır yüzden üyenin id gerekir:

mysql_query("INSERT INTO projects (title, user_id) VALUES('$title', ".$this->member->id.")");

veya

mysql_query("INSERT INTO projects (title, user_id) VALUES('$title', ".$this->member->getId().")");

İlki, $ this-> üye-> id, NULL sonuçları

The second one, $this->member->getId(), gives me this errveya:

Call to a member function getId() on a non-object in ....

İşte benim sınıfları (I offcourse bunun çoğu elimden) vardır

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;
    }       
}

3 Cevap

Bir adım geri atın ve sınıflar arasındaki ilişkilere bakmak. Veritabanınızda, Proje Üyesi (veya DB 'kullanıcı') "bir" vardır.

Sizin sınıf uygulamalarında bu ilişkiyi yansıtmaz. MainClass Üyesi "bir var", ama proje yok. Bu ilişki oluşturmak için taban sınıfının bir üyesi kullanıyorsunuz demektir.

MainClass dolar elemanı statik sürece bunlar ayrı örneklerini çünkü, Proje bir örneği, MainClass başka bir örneği bunun için ayarlanmış ne göremiyorum. Aslında global bir değişken gibi kullanıyor olurdu, çünkü $ elemanı statik yapma tavsiye etmem.

Dediğim gibi, bir adım geri almak ve ilişkileri bakmak. Genellikle veritabanı şeması ilişkileri takip ediyor musunuz? Neden Üyesi ve Proje MainClass türetmek mi? Ortak davranış nedir?

Ben de cevap veriyorum daha ben daha fazla soru soruyorum farkındayım ama benim bağırsak tepki bu özel teknik sorun, gerçek bir sorun değildir - bu, sınıf tasarımı biraz rethunk gerektiğini bulunuyor.

Umut olur.

Bunun yerine MainClass, sen bir örneğini oluşturmak olmalıdır bir örneğini oluşturmak Project.

$mainclass = new Project();
$member = new Member($id);
$mainClass->setMember($member);

Sen bir üst uzanan iki çocuk var ama çocuklar sınıfları birbirinden özel veya kamu "göremiyorum". Sen Proje sınıfa veri almak gerekir.