簡體   English   中英

擴展類並從子類訪問常量

[英]Extending a class and access constants from the child class

我正在與PHP類繼承和范圍問題作斗爭。 基本上,我有一個帶有許多有用方法(創建,保存,加載)的基類,開發人員當前將table_name傳遞給。 我想創建一堆模型類,它們是空的,但可以擴展並繼承基類,並且可以具有被調用的相同名稱的方法,而不是基類的版本。

下面的代碼難以從模型類的靜態方法中獲取table_name,有什么建議嗎?

class Model_Baseclass {
    private $table_name;
    public static function create($fields) {
        $table_name = //self::table_name - parent::table_name - const $table_name
        if ($table_name == NULL) {
            throw new exception('You must specify a table.');
        }
    }
}

class Model_Content_Gallery extends Model_Baseclass {
    public $table_name = 'Content_Gallery';
}

$old = Model_Baseclass::create(array('table_name' => 'Content_Gallery'));
$new = Model_Content_Gallery::create(array());

看一些PHP OOP教程。

沒有一種制造方法。 接下來是一個。 例如,在Java中通常為每個屬性創建一個get / set方法。 這樣,您可以從任何子類訪問它,而無需使用protected關鍵字,也不會使其變得清晰。

  • 在父類上創建一個getTableName()方法。
  • 在子類的實例上,可以調用$ this-> getTableName()方法,因為它是從基類繼承的。

如果您在父類上具有MyMethod()並想在子類中以其他方式實現它,則只需在子類中創建MyMethod()並使用getTableName()即可獲取表名屬性。

如果您使用subclass.MyMethod()實現需要調用parent.MyMethod(),則使用parent :: MyMehtod()(http://www.php.net/manual/zh/keyword.parent.php)

您需要將您的create方法設為非靜態,或者將table_name變量設為靜態。

如果需要靜態某些方法,則從php 5.3開始,您可以在靜態繼承的上下文中使用后期靜態綁定來引用被調用的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM