php 8.3 无“静态类”,只有静态属性和方法;默认访问控制为 public,不可用 readonly,初始化值须为编译时常量。

PHP 8.3 中没有“静态类”这个语言概念——只有静态属性和静态方法,它们属于类本身,而非某个实例。所谓“静态类属性”,准确说法是类的静态属性(static 属性),其访问控制(public、protected、private)决定了它在何处可被读写,而默认访问属性是 public。
静态属性的默认访问控制是 public
当你声明一个静态属性但未显式指定访问修饰符时,PHP 默认将其视为 public:
✅ 合法(隐式 public):
class Config {<br> public static $env = 'prod';<br> static $version = '1.0'; // ← 等价于 public static $version
}echo Config::$version; // ✅ 可直接外部访问
三种访问修饰符对静态属性的实际影响
尽管默认是 public,但你应根据封装原则主动选择合适的修饰符:
PHP 8.5.12 RC 1 候选版修复 BZ2、DOM、PDO、Opcache/JIT 和扩展内存安全问题,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
-
public static:可通过类名::$属性名在任何地方访问(包括外部、子类、其他类) -
protected static:仅限本类及子类内部访问,外部调用会报致命错误
→ 使用self::、static::或parent::访问 -
private static:仅本类内部可访问,子类也不可见
→ 只能用self::访问,不可被继承或覆盖
静态属性不能与 readonly 混用
PHP 的 readonly 仅适用于实例属性(即每个对象独立拥有的属性),不支持用于 static 属性:
❌ 错误写法:
class Cache {<br> public readonly static string $driver = 'redis'; // 语法错误!
}PHP 会直接报编译错误:"Syntax error, unexpected token 'static'" 或类似提示。
静态属性初始化的限制
静态属性的默认值必须是编译时常量表达式,不能依赖运行时计算:
- ✅ 允许:
public static int $limit = 100;、public static array $modes = ['cache', 'sync'];、public static string $ROOT = __DIR__;(__DIR__是编译期常量) - ❌ 不允许:
public static string $token = generateToken();(函数调用)、public static $now = time();(动态函数)、public static $config = $_ENV['DB_HOST'];(超全局变量)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










