1

我正在做一个后端项目。我需要返回一个带有另一个静态对象的静态对象:

Class this_is_a_very_long_class_name
{
    public static function call()
    {
        return self;
    }

    public static function script_link($link)
    {
        //doing stuff here...
    }
}

Class Main
{
    public static function view()
    {
        // trying to return View object
        return this_is_a_very_long_class_name::call();
    }
}

我正在尝试像这样使用它:

Main::view()::script_link('Some script');

那么我该如何实现呢?

PS:我不是在寻找其他解决方案。我正在寻找我所问的答案。

4

6 回答 6

1

你不需要那个。

采用

View::script_link();

这也是错误和误导的view()->script_link,因为 script_link 是静态的

附录

如果您的问题是您的类名长度,我建议您为此创建简单的包装器。

function createLink($string){
 return VERY_LONG_CLASS_NAME_HELLO_PHP_NAMESPACE::script_link($string);
}

这样你只需要createLink();

于 2011-06-06T13:58:20.240 回答
0

在 php 5.3 中:(return new View();而不是return View::self;)。
手册: http: //php.net/manual/en/language.oop5.basic.php#example-159

于 2011-06-06T13:57:47.583 回答
0

在 php 5.2 中使用ReflectionClass

于 2011-06-06T13:59:04.267 回答
0

我认为您在通话中的语法是错误的。由于它是静态的,因此您尝试执行的操作如下所示:

Main::view()::script_link('Some script');

除非这会给你一个语法错误。此外,由于它是静态的,因此您无需返回任何内容。您应该进行两次单独的调用:

Main::view();
View::script_link("Some script");

说“我需要返回一个静态对象”是没有意义的。如果定义了类,则静态对象存在并且可以访问。

于 2011-06-06T14:01:40.150 回答
0

您只需要一个变量来保存类,因为直接调用是无效的语法示例:

Class Main
{
    public static function view($type)
    {
        // return some class
        switch ($type) {
            case "View 2": 
                return View2;
                break;
            default:
                return View;
        }
    }
}

$v = Main::view("normal view");
$v::script_link('test');
于 2011-06-06T14:09:30.470 回答
0

您是否正在寻找后期静态绑定的功能?PHP 5.3 支持。见这里: http: //php.net/manual/en/language.oop5.late-static-bindings.php

于 2011-06-06T14:16:41.847 回答