【发布时间】:2011-11-16 12:33:01
【问题描述】:
我不擅长 PHP 和 Kohana 的新手。
我很感兴趣 Kohana 是如何制作这个结构的:Request::current()->controller()。我们先调用静态方法,再调用非静态方法。
我如何组织类似的结构?
【问题讨论】:
-
我猜current()返回的是某个类的实例。
我不擅长 PHP 和 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 中检索所有 SomeObjects。在本例中,这样做是这样的:
$someObject = StaticClass::GetSomeObject();
然后您可以再次调用该方法:
$someObject->DoSomething();
后两者可以这样写:
StaticClass::GetSomeObject()->DoSomething();
【讨论】:
public static $current; public static function current() { return Request::$current; } 我没有看到 KO 创建新的类实例
Request::$current 设置在其他地方。它确实返回了一些东西,并且给定您问题中的代码,您在 Request::$current 对象上执行 ->controller()。如果您还不清楚,请提出明确的问题。
Model::factory() 方法的源代码:github.com/kohana/core/blob/3.2/master/classes/kohana/model.php