2011-07-24 51 views
2

我有兩個類。一個孩子和一個父母。父進程正在調用一個來自子進程的靜態方法(這是子類中的一個被重寫的靜態父進程),並且我得到一個通用服務器錯誤。 當我刪除關係('延伸'部分),一切都很好,沒有錯誤。不知道爲什麼。你不能重寫靜態方法嗎?尋找答案,但似乎無法找到它們。從父項調用重寫的靜態方法

Class Fase { 

    public static function getbyId($id) { 
    //some stuff 
     } 
    public function getsomefaseitem($fase_item_id) { 
    FaseItem::getbyid($fase_item_id); 
    } 

} 

Class FaseItem extends Fase { 

    public static function getbyId($id) { 

     } 
} 
+1

據我所知,OOP,父類不應該調用他們的子類... – Quasdunk

+0

「一般服務器錯誤」是沒有用的。查看錯誤日誌並提供一些實際的細節。 –

+0

什麼樣的錯誤? –

回答

9

It works for me.


這似乎不可思議,但。基地應該沒有派生的知識。

或許使用static::來替代,並且依賴於重寫靜態成員函數—或「後期靜態綁定」。你需要PHP 5.3。

<?php 
class Fase { 
    public static function getbyId($id) { 
     echo "Fase::getbyId\n"; 
    } 

    public function getsomefaseitem($fase_item_id) { 
     static::getbyid($fase_item_id); // <--- 
    } 
} 

class FaseItem extends Fase { 

    public static function getbyId($id) { 
    echo "FaseItem::getbyId\n"; 
    } 
} 


$f = new Fase(); 
$f->getsomefaseitem(0); 
?> 
+0

很好的答案! –

+0

@Matthieu:謝謝! –

+0

如何確定'getbyId'方法是否在子類中退出? – Rikesh