2017-03-03 52 views
0

我有一些使用彼此功能的類。拿這個下面例如:有沒有辦法強制php在當前命名空間中使用類?

namespace app/myclass; 

class FirstClass 
{ 
    public function getSecondClass() 
    { 
     return SecondClass::instance(); 
    } 
} 

namespace app/myclass; 

class SecondClass 
{ 
    public function getFirstClass() 
    { 
     return FirstClass::instance(); 
    } 
} 

現在我已經在另一個命名空間的子類,如下所示:

namespace front\myclass; 

class FirstClass extends \app\myclass 
{ 
    public function someMethod() 
    {} 
} 

namespace front\myclass; 

class SecondClass extends \app\myclass 
{ 
    public function someMethod() 
    {} 
} 

當我使用instance()方法從子類,它會從父類返回實例。是否有可能使它從當前命名空間返回,因爲它是?

例如:

$myclass = new \front\myclass\FirstClass; 
$instance = $myclass->getSecondClass(); \\ will return \app\myclass\SecondClass 

我想它返回front\myclass\SecondClass沒有,而不必重寫方法,因爲我有一個應該使用同樣的規則很多文件。

+0

您是否在擴展命名空間或名爲myclass的類? – frz3993

+0

擴展類... Erm如何擴展名稱空間? O.O – user2707590

+0

您使用的名稱空間不能擴展。像'使用app \ myclass;'一樣。命名空間使用反斜槓。 – frz3993

回答

0

你必須要覆蓋的方法在FirstClass因爲父方法調用明確指定SecondClass一個靜態方法,另一種解決辦法可能是使用的特質,但我不建議他們,恕我直言,他們複雜的工作人員

實際上,在經過另一番思考之後,我覺得你的代碼可能需要重構,我在那裏聞到一些不好的東西,我真的沒有看到它(因爲我沒有關於它的信息,我不知道它,所以我不會看到它的信息,我不會看到它看到很多),但我可以聞到高度耦合的代碼,和/或OOP濫用,也許是一個功能嫉妒的問題。

+0

特性在這裏沒有幫助。我想做一些事情,而不必觸碰父類(它們是生成的類),但也不需要重寫子類中的方法,因爲我將不得不在整個類中重寫許多函數。 – user2707590

+0

父類是生成的文件。我不想觸摸和修改它們,因爲當我將不得不重新生成它們時,我將有代碼合併等等。所以我決定擴展它們並在子項中添加我需要的任何東西 – user2707590

+0

請問您可以發佈有意義的代碼示例! –

相關問題