2012-05-09 13 views
0

代わりに、20種類の異なる場合にスイッチコードブロックを書き込むいくつかの解決策があります。 動的変数になるオブジェクトの種類のようなコードを記述します。 オブジェクトの名前動的オブジェクト変数を作成する方法

フォーラムで選択された値に従って自分自身を調整しますので、私はこのような記述をします。

$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 
} 


     } 
?> 

答えて

1

$object = new $className(); 

またはあなたの場合:

$option = new $_POST['option_name'](); 
$option->calculated(); 
$option->create_record_for_database(); 

Howeve r、私は個人的にこのような変数を使う考えが嫌いです。

関連する問題