私はいくつかの静的変数と関数を持つPHP抽象クラスを持っています。php抽象静的変数は静的メソッド呼び出しの間に持続する
class Generic{
public static $ID;
private static $tableName;
private static $oldTableName;
protected static $DAL;
public static function Init($tableName, $id=null) {
if(self::$tableName)
self::$oldTableName=self::$tableName;
self::$tableName=$tableName;
self::$DAL = new DAL(self::$tableName);
}
public static function RecallTableName(){
if(self::$oldTableName){
self::$tableName=self::$oldTableName;
self::$oldTableName=null;
return true;
}
}
public static function GetProperty($id, $columnName, $whereStatement = "1=1"){
if(!self::$tableName)
return false;
//DO DB STUFF HERE
return; //RETURN WHAT DB CALLS DID HERE
}
}
いくつかのクラスを拡張し使用して、このジェネリッククラスを継承しています。
class Part extends Generic {
static function Init($tableName="part",$id = null) {
$return = parent::Init($tableName,$id);
new Part();
return $return;
}
public static function destruct(){
parent::RecallTableName();
}
public function __destruct() {
Part::destruct();
}
public static function GetProperty($id, $columnName, $whereStatement = "1=1") {
self::Init();
return parent::GetProperty($id, $columnName, $whereStatement);
}
}
class System extends Generic {
static function Init($tableName="system",$id = null) {
$return = parent::Init($tableName,$id);
new System();
return $return;
}
public static function destruct(){
parent::RecallTableName();
}
public function __destruct() {
Part::destruct();
}
public static function GetProperty($id, $columnName, $whereStatement = "1=1") {
self::Init();
return parent::GetProperty($id, $columnName, $whereStatement);
}
public static function GetInventory($PartManageIDToCheck)
{
return Part::GetInventory($PartManageIDToCheck);
}
}
このようにして、私は子供のメソッド呼び出しを実装すると、私は子供の死を突くことができます。さらに行く、私が呼び出すことができます。
System::GetInventory(1)
この意志:
は 1 - Generic::$tableName
にGeneric
に店舗 "システム" をInit()
を呼び出します。
2 - ネストされた兄弟今度はその後、問題なくGeneric::$tableName
このすべての作品にGeneric::$tableName
Generic::$oldTableName
に格納」の部分を移動するInit()
Generic
に呼び出します(パート)をCenerateしかし、私は背中合わせに2人の子供を使用する場合。それが崩壊してしまう。背中合わせに2を使用して
System::GetProperty(1, "ID");
Part::GetProperty(3, "ID");
がPart::GetProperty(3, "ID");
が呼び出されるときGeneric::$tableName == "system"
ように何とか存続することが一般的なことができます。
この問題を解決する方法はありますか?