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

PHP5.2で使用ReflectionClass

于 2011-06-06T13:59:04.267 に答える
0

呼び出しの構文が間違っていると思います。静的であるため、実行しようとしていることは次のようになります。

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

それ以外は構文エラーが発生します。また、静的であるため、何も返す必要はありません。2つの別々の呼び出しを行う必要があります。

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 に答える