You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 19:32:38