2009-10-26 61 views
4

我有三個類都有一個名爲'create'的靜態函數。 我想根據表單的輸出動態地調用適當的函數,但是在語法上有點麻煩。無論如何要執行此操作?PHP在調用靜態方法時使用變量

$class = $_POST['class']; 
$class::create(); 

任何意見將不勝感激。

謝謝。

+0

什麼版本的PHP? – dnagirl 2009-10-26 19:36:10

+0

你的例子會拋出一個錯誤嗎? $ _POST ['class']的有效性是什麼? – 2009-10-26 19:36:54

+0

這是5.2.1。 我收到以下錯誤: 解析錯誤:語法錯誤,意外T_PAAMAYIM_NEKUDOTAYIM – Dan 2009-10-26 19:42:28

回答

8

如果您正在使用PHP 5.2的工作,您可以使用call_user_func(或call_user_func_array):

$className = 'A'; 

call_user_func(array($className, 'method')); 

class A { 
    public static function method() { 
     echo 'Hello, A'; 
    } 
} 

會得到你:

Hello, A 


那種語法的你正在使用你的問題只有在PHP> = 5.3;請參閱Static Keyword的手冊頁面,大約如下:

As of PHP 5.3.0, it's possible to reference the class using a variable. The variable's value can not be a keyword (e.g. self, parent and static).

-2

我可能會誤解你想要的,但是這個怎麼樣?

switch ($_POST['ClassType']) { 
    case "Class1": 
     $class1::create(); 
     break; 
    case "Class2": 
     $class2::create(); 
     break; 
    // etc. 
} 

如果不工作,你應該看看EVAL(危險,要小心。)

0

我認爲這隻能從PHP 5.3.0來完成。請檢查this page並搜索$classname::$my_static以查看示例。

1

使用call_user_func

繼承人從php.net

class myclass { 
    static function say_hello() 
    { 
     echo "Hello!\n"; 
    } 
} 

$classname = "myclass"; 

call_user_func(array($classname, 'say_hello')); 
call_user_func($classname .'::say_hello'); // As of 5.2.3 

$myobject = new myclass(); 

call_user_func(array($myobject, 'say_hello')); 
+0

在外面添加這段代碼來抽象這麼多spaguetti會很好。無論如何,無論如何,都需要+1,1 – Ismael 2009-10-26 19:39:35

2

你有什麼作品的PHP 5.3一個例子。

ps。您應該考慮清理$ _POST ['class'],因爲您無法確定它將包含哪些內容。

相關問題