2011-11-16 46 views
0

我不擅長PHP和Kohana的新手。Kohana如何在靜態和非靜態之間創建鏈?

我很有趣Kohana是如何製造這種結構的:Request::current()->controller()。我們調用靜態方法,然後調用非靜態方法。

我如何組織類似的結構?

+1

我猜current()返回某個類的實例。 – Dennis

回答

2

Request::current()將返回一個對象,並對該對象執行controller()方法。

我明白你同時對靜態和非靜態的使用感到困惑。它根本不會令人困惑。鑑於這兩個類:

static class StaticClass 
{ 
    public function GetSomeObject 
    { 
     return new SomeObject(); 
    } 
} 

class SomeObject 
{ 
    public function DoSomething() 
    { 
     // Do something 
    } 
} 

然後,您可以初始化SomeObject自己,並執行其方法:

$someObject = new SomeObject(); 
$someObject->DoSomething(); 

但某些情況下,這是不可取的。我可以想象StaticClass是某種存儲庫(例如單身或工廠),管理您的SomeObject實例。您必須從StaticClass中檢索所有SomeObject。在這個例子中,這是這樣完成的:

$someObject = StaticClass::GetSomeObject(); 

然後,您可以再次調用方法:

$someObject->DoSomething(); 

後兩者可以一次這樣寫:

StaticClass::GetSomeObject()->DoSomething(); 
+0

'public static $ current;公共靜態函數current() { return Request :: $ current; }'我沒有看到KO創建新的類實例 – sigra

+0

Then'Request :: $ current'設置在別的地方。它確實返回了一些東西,並且在你的問題中給出了代碼,你可以在Request :: $ current對象上執行' - > controller()'。請問一個明確的問題,如果有什麼不清楚給你。 – CodeCaster

+0

FWIW對於類似行爲的東西,可以看一下'Model :: factory()'方法的源代碼:https://github.com/kohana/core/blob/3.2/master/classes/kohana/model。 PHP – Dickie