2011-11-16 44 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