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


Variable is set as string but undefined as object property

这种

明显的矛盾有什么解释?

使用 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();
}

我已经搜索了"已设置"和未定义之间的解释,但找不到。我真的很感激任何见解。

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

这是一个"可变范围"问题。

__construct内部,局部变量$city没有设置。

你必须通过参数传递它:

 public function __construct( $city )

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

 public function __construct()
 {
     global $city;

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


  • 阅读更多 关于 变量作用域