2014-05-09 84 views
0

我想用命名空間來覆蓋類中預定義功能覆蓋類中的預定義函數。

// one.class.php 

class One{ 
    public function __construct($str){ 
    echo strtolower($str); 
    } 
} 

好調用,這將導致

new One("mIxEd"); // mixed 

我想重寫用strtolower函數內部類一

我試圖做到這一點

// blabla.class.php 
namespace blabla; 
function strtolower($str){ 
    return strtoupper($str); 
} 
class One extends \One{}; 

那好吧,當我把它放在一起

// script.php 
require_once("one.class.php"); 
require_once("blabla.class.php"); 
new One("mIxEd"); // mixed 
new blabla\One("mIxEd"); // mixed 

它仍然是小寫的輸出,所以我不重寫裏面一類用strtolower。

我流浪,如果是甚至可能... 感謝您的幫助!

回答

1

您需要重寫blabla \ One中的構造函數來調用名稱空間strtolower。

class One extends \One { 
    public function __construct($str) {echo strtolower($str);} 
} 
+0

謝謝,但不是我想要做的。我試圖覆蓋預定義的功能 – nulll

+0

對不起。我不認爲有一種方法可以覆蓋它來強制基類調用你的覆蓋。正如你所看到的,你需要在命名空間類中明確地調用它。可能更好的方法是將strtolower抽象成一個成員函數,並覆蓋在命名空間類中執行其他操作。 – dgross