PHP怎样定义类属性_PHP属性访问控制【权限】
PHP7.4+强制类属性声明必须使用public、protected或private修饰符,否则报错。public无限制,protected允许类内和子类访问,private仅限本类。PHP8.4新增不对称可见性,可单独控制写入权限。继承时同名private属性相互独立,需注意访问边界。
**一句话总结:从 PHP 7.4+ 开始,类属性声明必须显式写上 `public`、`protected` 或 `private`,否则会触发严格警告或致命错误。**
PHP 类属性必须带访问修饰符
PHP 7.4 是一个分水岭。从那个版本起,强制要求所有类属性声明必须明确用 `public`、`protected` 或 `private` 修饰。如果再用 `var` 或者干脆不写修饰符,PHP 8.0+ 会直接报 `E_COMPILE_ERROR`,而 PHP 7.4–7.9 也会抛出 `E_DEPRECATED` 警告。 - `var $name`:这是 PHP 4 的遗留语法,早已废弃,别再用。 - `$name = 'x';`(无修饰符):在 PHP 7.4+ 会直接报编译错误:「Syntax error, unexpected '$name'」。 - 正确的写法只有三种:`public $name`、`protected $age`、`private $id`。不同修饰符的实际访问边界
理解这三个修饰符,关键不在于“能不能看到”,而在于“在哪段代码里能用 `$this->xxx` 或 `$obj->xxx`”——这完全取决于调用上下文。 - **`public`**:最开放。类内部、子类中、甚至外部通过 `$obj->xxx` 都能直接读写,没有限制。 - **`protected`**:比 public 收紧一步。类内部和子类中可以用 `$this->xxx` 访问;但如果在外部试图用 `$obj->xxx`,PHP 会直接报 `Fatal error: Cannot access protected property`。 - **`private`**:最严格。仅限当前类的内部通过 `$this->xxx` 访问。子类中如果声明一个同名属性,会被视为一个**全新的属性**,而不是继承或覆盖;外部调用当然也会直接报错。PHP 8.4 新增:不对称属性可见性(set-only 限制)
从 PHP 8.4 开始,一个非常实用的特性上线了:可以单独控制属性的“可写范围”。比如允许类内或子类赋值,但对外只读。 - 语法示例:`public private(set) string $title` → 外部可以读 `$obj->title`,但不能写 `$obj->title = 'x'`。 - 常见组合: - `public protected(set)`:子类可修改,外部只读。 - `protected private(set)`:仅本类可以赋值。 - 注意:`set` 的可见性不能比默认可见性更宽,比如 `private public(set)` 是不合法的。 - 另外,`__set()` 魔术方法无法绕过这个限制——该规则在字节码层面就强制执行了。容易被忽略的继承陷阱
很多时候,问题不出在声明语法上,而出现在跨类调用时误判了 `$this->xxx` 的实际归属。尤其是当父类和子类都声明了同名的 `private` 属性时,它们完全是两个独立的变量。 - 父类定义 `private $cache`:子类无法访问,也无法重新定义。子类里写 `private $cache` 完全是另一个变量。 - 父类定义 `protected $config`,子类写 `protected $config = []`:子类构造时会覆盖父类初始化值,但两者内存地址不同,不是同一个引用。 - 如果依赖属性引用传递(比如数组引用),`protected` 属性在父子类中也不会共享底层数据结构。 最常见的坑就是:写代码时以为子类访问的是父类的属性,结果因为修饰符的限制,实际在操作自己的副本,导致数据错乱。搞清楚这一点,很多继承相关的 bug 就能提前规避。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。















