2015-02-09 96 views
0

的變量變量繼承類結合的事情是,假設我們有三個類A,B和C B和C從A我怎麼能延遲靜態與PHP

<?php 
class A{ 
    public static function update(){ 
    static::$id = 1; 
    } 
} 

class B extends A{ 
    public static $id_B; 
} 

class C extends A{ 
    public static $id_C; 
} 

A::update(); 

?> 

繼承因爲任何原因,B和C中的ID的名稱是不同的。 B是id_B,C是id_C。類A是一種接口,所以它只知道繼承的類B和C應該有一個變量$ id。 A想要更新的$ id爲1。我想是嘗試更新$ ID_B和$ id_C 1。我試過幾個方法,比如設置一個變量的變量是這樣的:

class A{ 
    public static function update(){ 
    static::$$id_name = 1; 
    } 
} 

class B extends A{ 
    public static $id_name="id_B"; 
    public static $id_B; 
} 

但它不工作。那麼是否有人可以幫我解決這個設計?

+1

我認爲你已經過度複雜的一切。除非你需要將'B :: $ id'分開到'B :: $ id_B',那麼定義後者的原因是什麼?只需使用'$ id'。 – Marty 2015-02-09 04:01:33

+0

我想寫一個數據庫類作爲A,這樣如果我的合作伙伴想要控制數據庫,他可以只創建像B和C這樣的繼承類來CRUD數據庫,而無需編寫相同的CRUD代碼。但事情是數據庫中的id名可能與id_student,id_player不同。所以那就要奮鬥我。 – 2015-02-09 18:38:15

回答

1

是的,它只是不這樣工作。要麼你知道你想要訪問什麼變量,要麼將它留給個性化的代碼來完成。例如:

class A { 
    public static function update(){ 
    static::updateId(1); 
    } 

    protected static function updateId($value) { 
    static::$id = $value; 
    } 
} 

class B extends A{ 
    public static $id_B; 

    protected static function updateId($value) { 
    static::$id_B = $value; 
    } 
} 

class C extends A{ 
    public static $id_C; 

    protected static function updateId($value) { 
    static::$id_C = $value; 
    } 
} 

你正在尋找與您的變量變量的語法是:

static::${static::$id_name} = 1; 

但我建議使用重載的方法,而不是,這將給您從長遠來看,更多的控制。 「接口」最好由可調用函數定義,而不是變量名稱。不管這樣做是否靜態是一個好主意,首先是一個不同的討論。

+0

這正是我想要的。謝謝! – 2015-02-09 18:54:10