变量设置为字符串但未定义为对象属性

时间:2016-02-27 13:39:08

标签: php undefined isset

这种明显矛盾的解释是什么?

使用isset变量$ city ='';返回'true'。

但是我必须在以下代码中使用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();
}

我搜索了'is set'和undefined之间的解释但找不到。我真的很感激任何见解。

2 个答案:

答案 0 :(得分:0)

您在构造函数中没有$ city变量,这就是您收到该错误的原因。

答案 1 :(得分:0)

这是一个“可变范围”问题。

__construct内,未设置本地变量$city

你必须通过参数传递它:

 public function __construct( $city )

或者根据您的目标将其声明为全球:

 public function __construct()
 {
     global $city;

但我认为你正在寻找第一个解决方案。