是否有一些解决方案代替为20种不同情况编写开关代码块。 编写类似于动态变量的对象类型的代码。 对象的名称
将根据为论坛选择的值value = "option1" , value = "option2"
调整自己,所以我会写这样的东西。
$object = $_POST['option_name'];
根据我可以
创建适合他班级的新对象。
如果不知道他的名字我可以简单地调用他的方法来查看他计算的内容$object->calculated () //according it is match class
然后代码也将根据下一个代码适合他的表名数据库。
$object->create_record_for_database (); //because each class has a separate table name inside.
我希望我很清楚谢谢
示例代码:
<?php
require_once("/includes/database.php");
require_once("/includes/some_class.php");
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<br>value1<input type=text name='value1'>
<br>value2<input type=text name='value2'>
<h2>please select one of the choice</h2>
<input type="radio" name="option_name" value="option1" /> "option1"
<br><input type="radio" name="option_name" value=""option2" /> option2
<br><input type="radio" name="option_name" value="option3" /> option3
*
*
*
<br><input type="radio" name="option_name" value="option20" /> option20
<br><input type="submit" name="submit" value="Submit Form"><br>
</form>
<br/><br/>
<?php
$object="";
echo("<br>");
if (isset($_POST['submit'])) {
if (!empty($_POST['option_name'])) {
ClassOption::$option_name = $_POST['option_name'];//can be from option1,option2...option20
ClassOption::$value1 = $_POST['value1'];
ClassOption::$value2 = $_POST['value2'];
$option = $_POST['option_name'];
switch ($option)
{
case option1:
$option1 = new Option1 ( );// create object1 and calculate it
echo 'object1 calculated', $option1->calculated(), "<br />";
$option1->create_record_for_database();//with value1,value2,option_name
break;
case option2:
$option2 = new Option2 ();// create object2 and calculate it
echo 'object2 calculated', $option2->calculated(), "<br />";
$option20->create_record_for_database();//with value1,value2,option_name
break;
*
*
*
case option20:
$option2 = new Option2 ();
echo 'object2 calculated', $option2->calculated(), "<br />";
$option20->create_record_for_database();//with value1,value2,option_name
}
}
?>
答案 0 :(得分:1)
如果要从名称存储在字符串中的类中创建新对象,可以使用:
$object = new $className();
或者在你的情况下:
$option = new $_POST['option_name']();
$option->calculated();
$option->create_record_for_database();
但是,我个人不喜欢使用像这样的变量。