2012-01-31 33 views
0

初看,這段代碼似乎沒有問題。如果在添加isset時始終設置爲true

// my_controller.php 
$data['errors'] = (object)$this->session->userdata('errors_registration'); 
$this->load->view('registration/my_view',$data); 

// print_r($data['errors']) 
// stdClass Object 
// (
// [domain_err] => 0 
// [wbholder_err] => 0 
// [methodpayment_err] => 0 
// [createaccount_err] => 2 
// [gtc_err] => 0 
//) 

// my_view.php 
if($errors->domain_err == 1) echo "TRUE"; else echo "FALSE"; // FALSE 

當,$data['errors']是空的,

// print_r($data['errors']) 
// stdClass Object 
// (
// [scalar] => 
//) 

// my_view.php 
if($errors->domain_err == 1) echo "TRUE"; else echo "FALSE"; 

我得到這個,

遇到

一個PHP錯誤嚴重性:通知消息:未定義的屬性:stdClass的:: $ domain_err

爲了解決這個問題,我加了isset(),現在我的代碼片段爲if(isset($errors->domain_err) == 1),但是,由於這個改變,這個條件似乎總是被設置爲true,因此輸出TRUE。有沒有其他的方法來解決這個問題,同時保持我期待的條件輸出?

回答

2

它始終成立的原因是因爲您現在將它與函數返回的內容進行比較,這是因爲$ errors-> domain_err已設置。你需要做的是改變的條件:

如果(isset($錯誤 - > domain_err)& & $錯誤 - > domain_err == 1)

isset不返回變量的值,只是它是否存在。

+0

好找伴侶。 – 2012-01-31 08:15:14

0

爲什麼你會試圖「克服」錯誤信息?修復造成錯誤的原因。在這種情況下,您引用的是您正在使用的對象中不存在的成員。在你發佈的代碼中,我沒有看到你在哪裏實例化$ errors類,也沒有發佈任何代碼。去看任何類,看看你是否看到名爲$ domain_err定義的成員變量,並確保它被定義爲公開可用。就我個人而言,我不喜歡給成員變量公共範圍,因爲我更喜歡提供一個get/set類型的函數來設置或返回它們的值。

2

避免重複這種模式

if (isset($errors->domain_err) && $errors->domain_err == 1) 

你可以寫這樣的函數

function check_value(&$variable) { 
    return (isset($variable) ? &$variable : false); 
} 
if (check_value($errors->domain_err)) { echo "ERROR"; } 
else { echo "NO ERROR"; } 
相關問題