2013-09-26 54 views
0

一些PHP內置類爲其構造函數使用舊的命名方案(I.E.他們的類名)。例如SoapVar的構造函數是Soapvar::SoapVar()。現在我試圖擴展這個類並覆蓋它的構造函數。我必須使用類名來做到這一點,通常__constructor()不起作用。如何用命名空間類(舊式構造函數)重寫擴展類的構造函數?

非命名空間,使用__constructor()

class SomeClass extends SoapVar { 
    public function __constructor() { 
    print "Trying to override parent's constructor.\n"; 
    } 
} 

$class = new SomeClass(); /* Not working */ 

非命名空間,使用類名作爲構造:

class SomeClass extends SoapVar { 
    public function SomeClass() { 
    print "Trying to override parent's constructor.\n"; 
    } 
} 

$class = new SomeClass(); /* Working */ 

現在我需要使用一個命名空間的類。唯一的問題是:As of PHP 5.3.3, methods with the same name as the last element of a namespaced class name will no longer be treated as constructor.所以這個:

namespace Example\Namespace; 

class SomeClass extends \SoapVar { 
    public function SomeClass() { 
    print "Trying to override parent's constructor.\n"; 
    } 
} 

$class = new SomeClass(); /* Not working */ 

不行!有沒有辦法解決這個問題,還是我被迫使用全局命名空間?這個問題有沒有錯誤報告?

回答

1

捂臉

應該使用__construct()而不是__constructor()