2016-02-27 80 views
-1

這個明顯矛盾的解釋是什麼?變量設置爲字符串,但未定義爲對象屬性

當使用isset變量$ city ='';返回「真」。

但是我必須使用if語句在下面的代碼,以避免不確定的錯誤:

class Holiday { 

public $city = ''; 

public function __construct() { 
     if (isset($city)) { 
     $this->city = $city; 
     } 
     } 

public function get_city() { 
     return $this->city; 
} 

public function set_city($city) { 
     return $this->city = $city; 
} 
} 

$germany = new Holiday; 

$germany->set_city('Berlin'); 

function travel($a) { 
echo "Visit " . $a->get_city(); 
} 

...我已經尋找「設置」和不確定,但無法找到一個之間的解釋。我真的很感激任何見解。

+0

isset檢查是否變量被定義或沒有。 –

+0

@IanStewart你在哪裏得到這個錯誤?當然不是在你的示例代碼中,即使沒有修改它。 – fusion3k

+0

@fusion 3k當我使用set_city($ city)函數時發生錯誤。如果我直接將該值傳遞給對象(即「柏林」),它無論如何都可以工作。 –

回答

0

您在構造函數中沒有$ city變量,這就是爲什麼您會收到該錯誤。

+0

感謝您的回覆。我剛剛在構造函數中添加了$ city,但仍然收到'Undefined variable'錯誤。 –

+0

當你創建它時,你會將它傳遞給對象嗎? –

+0

這是有效的。然而,它會使代碼複雜,因爲我使用的類有10個變量,大約150個字符長。 '全球'或'如果'的聲明方式當然會使代碼看起來更清晰。 –

0

這是一個「可變範圍」問題。

__construct裏面,沒有設置局部變量$city

你必須通過參數來傳遞:

public function __construct($city) 

或者將其聲明爲全球性的,這取決於你的目標:

public function __construct() 
{ 
    global $city; 

但我認爲你是在尋找第一個解決方案。


相關問題