【问题标题】:How Kohana make chain between static and non-static?Kohana 如何在静态和非静态之间建立链?
【发布时间】:2011-11-16 12:33:01
【问题描述】:

我不擅长 PHP 和 Kohana 的新手。

我很感兴趣 Kohana 是如何制作这个结构的:Request::current()->controller()。我们先调用静态方法,再调用非静态方法。

我如何组织类似的结构?

【问题讨论】:

  • 我猜current()返回的是某个类的实例。

标签: php oop kohana


【解决方案1】:

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()。如果您还不清楚,请提出明确的问题。
  • FWIW 对于行为类似的东西,请查看Model::factory() 方法的源代码:github.com/kohana/core/blob/3.2/master/classes/kohana/model.php
猜你喜欢
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
相关资源
最近更新 更多