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

PHP中private修饰符未按预期工作:为何可给私有变量赋值?

问题:为何能对PHP私有成员变量赋值并输出?

我定义了如下Product类:

class Product {
    public $name;
    private $price2;
    protected $number;

    function getNmae() {
        return $this->name;
    }

    function getPrice() {
        return $this->price2;
    }

    function getNumber() {
        return $this->number;
    }
}

随后创建了继承自Product的Banana类,并编写了以下代码:

<?php
include 'oop_test.php';

class Banana extends Product {
   
}

$ba = new Banana();
echo $ba->price2 = 2000;
?>

执行后成功为private修饰的$price2赋值并输出结果,我无法理解为何能对私有变量进行赋值操作?


解答

你并没有修改Product类里的私有成员$price2,而是给Banana类的实例$ba动态新增了一个公共成员变量$price2。

PHP是弱类型且支持动态属性的语言,当你尝试给对象的一个未定义属性赋值时,PHP会自动在该对象上创建一个新的公共属性——不管父类里是否有同名的私有属性。

私有成员$price2是属于Product类的,只有Product类内部的方法才能访问它。而你通过$ba->price2 = 2000创建的是Banana实例自己的公共属性,和父类的私有属性完全是两个不同的变量,只是名字相同而已。

如果要验证这一点,你可以调用父类的getPrice()方法查看返回值:

echo $ba->getPrice(); // 输出null,因为父类的私有$price2根本没被赋值

这就说明父类的私有成员并没有被修改,你只是给实例新增了一个同名的公共属性而已。


内容的提问来源于stack exchange,提问作者Osama Mohammed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:03:34