2011-03-21 77 views
0

我正在嘗試讓某個類正常工作,但出於某種原因,我無法找到我在該類中構建的變量。下面是類代碼:類文件的URL(cls_question_object.php)PHP,身份不明的變量

class question_object{ 

// the id to the question 
public $i_id = ""; 

// the question string 
public $s_qString = ""; 

// the question type 
public $s_qType = ""; 

/* the array of answer strings 
*/ 
public $a_qAnswerStrings = array(); 
    public $a_qAnswerSet = array("id"=>"","string"=>""); 

} 

這裏是我與我的測試類的代碼:文件URL(test_question_object.php)

include("cls_question_object.php"); 

/* - test for class question object - 
*/ 

$cls_obj = new question_object; 
$cls_obj->$i_id = "1"; 
$cls_obj->$s_qString = "test question string"; 
$cls_obj->$s_qType = "fib"; 
$cls_obj->$$a_qAnswerStrings[0]['id'] = "0"; 
$cls_obj->$$a_qAnswerStrings[0]['string'] = "test answer string"; 

print_r($cls_obj); 

這裏是我得到的錯誤:

Notice: Undefined variable: i_id in C:\wamp\www\Exam Creator\test_question_object.php on line 9 
+0

請不要用之類的東西'i_'爲整數或's_'字符串前綴的變量。這是一個令人難以置信的過時的做法,並且在PHP中變量的類型可以並且將改變以適應其使用的價值特別小。你只會以這種方式產生醜陋,難以維護的代碼。 – meagar 2011-03-21 02:22:20

回答

2

您可以通過做訪問這些實例變量:

$cls_obj->i_id = "1"; 

而不是:

$cls_obj->$i_id = "1"; 

然而,它通常是不好的做法,使實例變量公開,而不是使他們private,且mutator methods

你會做這樣的事情:

private $i_id = ""; 

public function getId(){ 
    return $this->id; 
} 

public function setId($id){ 
    $this->id = $id; 
} 

,你會像這樣訪問這些功能:

$cls_obj = new question_object(); 
$cls_obj->setId(5); 
$id = $cls_obj->getId(); 
+0

謝謝你。我一定會把這個付諸實踐。 – 2011-03-22 13:00:32

1

$ OBJ - > $ FIELD_NAME這個錯誤,請使用$ obj-> FIELD_NAME訪問您的對象的字段。你的情況 它應該像這樣使用:

$cls_obj = new question_object; 
$cls_obj->i_id 
+0

這是問題的答案。這樣做意味着它會嘗試訪問存儲在$ i_id中的值的名稱的類變量 - 有點像$$ var的工作方式。沒有$ i_id - 因此您的未定義通知。 – 2011-03-21 03:33:24