php 7.4 起强制要求类属性显式声明访问修饰符,不再支持无修饰符或 var 声明;命名空间不影响该规则。

PHP 7.4 没有改变类属性的默认访问控制行为。在命名空间下或非命名空间下,未显式声明 public、protected 或 private 的类属性,依然默认为 public。
这与 PHP 历史行为完全一致,且不受命名空间影响——命名空间只负责解决类、函数、常量的名称冲突问题,不参与访问控制语义的定义。
例如:
namespace App\Models;
class User {
$name; // ❌ 语法错误!PHP 7.4 及以后版本已禁止省略访问修饰符
}
⚠️ 注意:从 PHP 7.4 开始,var 和无修饰符的属性声明已被废弃并最终移除支持。
实际运行会报 Parse error: syntax error, unexpected '$name' (T_VARIABLE),因为:
-
var $name;是 PHP 4 风格,自 PHP 7.4 起完全不被允许; -
$name;(无任何修饰符)在 PHP 7.4+ 中直接语法报错,不再隐式转为public。
✅ 正确写法必须显式声明可见性:
namespace App\Models;
class User {
public string $name;
protected int $age;
private ?string $email = null;
}
所以关键点不是“默认是否有变化”,而是:
- 默认行为本身已不复存在;
-
强制要求显式写出
public/protected/private; - 命名空间对这一规则无任何影响,它既不放宽也不加强访问限制。
你必须为每个属性明确指定可见性,否则代码无法通过解析。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











