我不擅長PHP和Kohana的新手。Kohana如何在靜態和非靜態之間創建鏈?
我很有趣Kohana是如何製造這種結構的:Request::current()->controller()
。我們調用靜態方法,然後調用非靜態方法。
我如何組織類似的結構?
我不擅長PHP和Kohana的新手。Kohana如何在靜態和非靜態之間創建鏈?
我很有趣Kohana是如何製造這種結構的:Request::current()->controller()
。我們調用靜態方法,然後調用非靜態方法。
我如何組織類似的結構?
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();
'public static $ current;公共靜態函數current() { return Request :: $ current; }'我沒有看到KO創建新的類實例 – sigra
Then'Request :: $ current'設置在別的地方。它確實返回了一些東西,並且在你的問題中給出了代碼,你可以在Request :: $ current對象上執行' - > controller()'。請問一個明確的問題,如果有什麼不清楚給你。 – CodeCaster
FWIW對於類似行爲的東西,可以看一下'Model :: factory()'方法的源代碼:https://github.com/kohana/core/blob/3.2/master/classes/kohana/model。 PHP – Dickie
我猜current()返回某個類的實例。 – Dennis