3
我有一個充當基類的類。然後我有幾個其他類從它繼承。我想用靜態語法開始加載繼承的類,但行爲沒有多大意義。關於繼承類的PHP新self()創建基類對象
直到現在我加載了這樣的類,它完成了這項工作。
$obj = new foo();
$something = $obj->ByID(1);
我希望能夠像這樣調用ByID函數。
$something = foo::Get()->ByID(1);
上述代碼正在工作,但它沒有調用繼承類,它正在加載基類。我想我可以看到爲什麼會發生這種情況,但它沒有任何意義。在.NET中,「this」將始終適用於繼承的對象,但它不是以這種方式在我這裏工作。
我有一個基類欄用以下方法。這在繼承的類中不會被覆蓋。事實上,繼承的類只包含1個單一屬性。
class bar
{
public $directory;
public function Get()
{
return new self();
}
public function ByID($id)
{
//get the record from the file by using $directory to find the file.
}
}
class foo extends bar
{
public $directory = "/something/";
}
遇到的問題IM是,當我在一個靜態的方式加載類,自()被返回的基類的對象,而不是繼承的類。我需要繼承的類的$directory
屬性。繼承的類當然會包含額外的功能和其他的東西,但現在這是阻止我實現這樣的代碼的障礙。任何想法我做錯了什麼?
我不想在每個繼承的類中重寫Get()。有了laravel,我可以記住模型類具有類似的結構,您可以創建一個模型,其中有一個屬性是表的名稱,並且不管怎樣它都可以正常工作。
[延遲靜態結合](http://php.net/manual/en/language.oop5.late-static-bindings.php) –
和'獲取()'應該被定義爲一個靜態方法('公共靜態函數Get()')如果你正在靜態訪問它(像你一樣) –