PHP。调用类的静态方法,哪个类名保存在其他类的静态变量中?

时间:2014-11-21 09:47:00

标签: php oop static

例如我有2个类: " Main"和" Dll_Main_Bla"。

Class "Dll_Main_Bla"只有静态方法!例如

public static function doIt($argument){return $argument*2;};

Main内我有静态变量 public static $dll_bla = 'Dll_Main_Bla';

Class Main的非静态方法我要打电话:

$x = Dll_Main_Bla::doIt(2);

但是我想集中初始化我的Dll并像这里一样打电话:

// how to ??? $x = self::$dll_bla::doIt(2);

是的,它不起作用,但你可能会理解我想要的是什么。 :) 我该如何编写该行以使其可行? 谢谢你的任何提议!

2 个答案:

答案 0 :(得分:2)

您可以使用call_user_func_array()PHP reference link

小测试示例:

<?php

class Main {
    public static $dll_bla = 'Dll_Main_Bla';

    public function init() {
        $x = call_user_func_array(array(self::$dll_bla, 'doIt'),array(2));
        echo $x;
    }
}

class Dll_Main_Bla {
    public static function doIt($argument) {
        return $argument*2;
    }
}

$main = new Main;
$main->init();

答案 1 :(得分:1)

考虑这样做:

<?php
class Dll_Main_Bla {
    public static function toBeCalled($anyParam) {
        return 'Elo, ' . $anyParam;
    }
}

class Main {
    public static $dll_bla = 'Dll_Main_Bla';

    public function test() {
        $className = Main::$dll_bla;
        $x = $className::toBeCalled('Vincent');

        return $x;
    }
}

$main = new Main;
echo $main->test(); //should do what you expect it to do