PHP类中已声明未赋值属性为何不报错?
PHP类属性未赋值时的行为差异解析
先看你提供的代码:
<?php class Fruit { public $name; public $color; public function __construct($name, $color) { $this->color = $color; } public function intro() { echo "The fruit is {$this->name}, the color is {$this->color}."; } } $apple = new Fruit("Apple", "red"); $apple->intro(); ?>
执行后输出:
The fruit is , the color is red.
两种情况的原因分析:
声明了
public $name;但未赋值时,不报错且显示空字符串
PHP中,当你在类里显式声明了类属性(不管是public/protected/private),如果没有手动赋值,PHP会自动把它初始化为对应类型的默认空值。对于字符串类型的属性来说,这个默认值就是空字符串""。因为属性已经被明确声明存在,访问$this->name时PHP能找到这个属性,只是它的值是空的,因此不会触发错误,直接输出空字符串。删除
public $name;声明后,出现未定义属性的通知
PHP是动态类型语言,但类的属性如果没有提前声明,当你第一次访问$this->name时,PHP会检查这个属性是否在类的定义中存在。因为你没声明过$name,也没在任何地方给$this->name赋值,PHP就会判定这是一个未定义的属性,从而抛出Notice: Undefined property: Fruit::$name的警告(默认错误显示级别下会输出这个提示)。
内容的提问来源于stack exchange,提问作者Sachin
相关产品推荐
相关产品推荐

