Bir üst nesnenin statik özelliğini geçersiz ve üst nesne PHP yeni değeri erişmesine izin nasıl?

0 Cevap php

Bu benim ne var: veritabanı üzerinde kalıcı tüm nesneler aslında nitelik değişiklikleri izlemek ve databas sorguları çalıştırmak için tüm mantık koduna sahip DatabaseObject soyut sınıfını genişletmek.

Ben özel nesne ayrıntıları tanımlamak için iki statik değişkenleri kullanarak ediyorum. Ben temel sınıfta jenerik onları tanımlamak, ve daha sonra sözde ben gerçek veritabanı nesneleri bunların üzerine.

Sorun: üst sınıfında kod aslında çalıştırıldığında, bu geçerli nesne değeri yerine ebeveyn eski değerini kullanır.

Burada taban sınıfı için kod:

abstract class DatabaseObject {

    public $id;

    private static $databaseTable = NULL;
    private static $databaseFields = array();

    private $data = array();
    private $changedFields = array();

    public function IDatabaseObject($id) {
    $this->id = $id;
    $this->data = Database::GetSingle(self::$databaseTable, $id);

    Utils::copyToObject($this, $this->data, self::$databaseFields);
    }

    public static function Load($id) {
    return new self($userID);
    }

    public static function Create($data) {

    $id = Database::Insert(self::$databaseTable, $data);

    return new self($id);
    }

    public function Save() {
    $data = Utils::copyFromObject($this, $this->changedFields);

    Database::Update(self::$databaseTable, $data, $this->id);

    }

    public function __constructor() {
    // We do this to allow __get and __set to be called on public vars
    foreach(self::$databaseFields as $field) {
        unset($this->$field);
    }
    }

    public function __get($variableName) {
    return $this->$variableName;
    }

    public function __set($variableName, $variableValue) {
    // We only want to update what has been changed
    if(!in_array($variableName, $this->changedFields) && in_array($variableName, self::$databaseFields)) {
        array_push($this->changedFields, $variableName);
    }

    $this->$variableName = $variableValue;
    }
}

Ve burada yukarıdaki temel sınıf uzanan nesnelerden biri için kod:

class Client extends DatabaseObject {

    public static $databaseTable = "clients";
    public static $databaseFields = array("name","contactName","primaryUserID","email","is_active","rg","cpf","cnpj","ie","addrType","addrName","addrNumber","addrComplement","addrPostalCode","addrNeighborhood","addrCity","addrState","addrCountry","phoneLandline","phoneFax","phoneMobile");

    public $name;
    public $contactName;

    public $primaryUserID;
    public $email;

    public $is_active;

    public $rg;
    public $cpf;
    public $cnpj;
    public $ie;

    public $addrType;
    public $addrName;
    public $addrNumber;
    public $addrComplement;
    public $addrPostalCode;
    public $addrNeighborhood;
    public $addrCity;
    public $addrState;
    public $addrCountry;

    public $phoneLandline;
    public $phoneFax;
    public $phoneMobile;

    public static function Load($id) {
 return new Client($id);
    }

}

Ben burada yanlış ne yapıyorum? Ben aynı sonucu elde edebilirsiniz başka bir yolu var mı?

Kısa bir zeyilname: Ben esas bu NetBeans 'otomatik tamamlama özelliği ile görülebilir izin sınıf vücutta özelliklerini beyan.

0 Cevap