2014-11-21 42 views
0

例如我有2个课程: “Main”和“Dll_Main_Bla”。PHP。调用类名保存在其他类的静态变量中的类的静态方法?

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);

是的,它不起作用,但你可能明白我到底想要什么。 :) 我会如何写这行以使其可行? 感谢您的任何提议!

+1

的声音,我喜欢你的*** ***真正的问题是必须使用严重书写的代码... – 2014-11-21 10:17:06

回答

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

考虑这样做:

<?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 
+0

是的!有用!谢谢!但有没有可能调用临时变量$ className?希望看到更短的解决方案。 $ {self :: $ dll_bla} :: toBeCalled('Vincent')或类似的... – LINKeRxUA 2014-11-21 10:03:18

+0

更短的方式,请检查@RichardBernards解决方案使用call_user_func_array – fortune 2014-11-21 10:15:32

+0

不,谢谢!你的解决方案看起来像写更容易:) – LINKeRxUA 2014-11-21 10:28:40