我有三個類都有一個名爲'create'的靜態函數。 我想根據表單的輸出動態地調用適當的函數,但是在語法上有點麻煩。無論如何要執行此操作?PHP在調用靜態方法時使用變量
$class = $_POST['class'];
$class::create();
任何意見將不勝感激。
謝謝。
我有三個類都有一個名爲'create'的靜態函數。 我想根據表單的輸出動態地調用適當的函數,但是在語法上有點麻煩。無論如何要執行此操作?PHP在調用靜態方法時使用變量
$class = $_POST['class'];
$class::create();
任何意見將不勝感激。
謝謝。
如果您正在使用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).
我可能會誤解你想要的,但是這個怎麼樣?
switch ($_POST['ClassType']) {
case "Class1":
$class1::create();
break;
case "Class2":
$class2::create();
break;
// etc.
}
如果不工作,你應該看看EVAL(危險,要小心。)
我認爲這隻能從PHP 5.3.0來完成。請檢查this page並搜索$classname::$my_static
以查看示例。
使用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'));
在外面添加這段代碼來抽象這麼多spaguetti會很好。無論如何,無論如何,都需要+1,1 – Ismael 2009-10-26 19:39:35
你有什麼作品的PHP 5.3一個例子。
ps。您應該考慮清理$ _POST ['class'],因爲您無法確定它將包含哪些內容。
什麼版本的PHP? – dnagirl 2009-10-26 19:36:10
你的例子會拋出一個錯誤嗎? $ _POST ['class']的有效性是什麼? – 2009-10-26 19:36:54
這是5.2.1。 我收到以下錯誤: 解析錯誤:語法錯誤,意外T_PAAMAYIM_NEKUDOTAYIM – Dan 2009-10-26 19:42:28