我不擅长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