PHP中的static关键字主要用于定义静态成员(属性和方法)、静态变量以及实现后期静态绑定。 以下是具体说明:
1. 静态方法
- 通过static关键字定义的方法属于类而非实例,无需实例化即可直接通过类名调用(如ClassName::staticMethod())。
- 静态方法中不可使用伪变量$this,因其不依赖对象上下文。
- 错误用法:若用静态方式调用非静态方法(如ClassName::nonStaticMethod()),PHP 8.0.0前会触发E_DEPRECATED警告,之后会直接抛出错误。
2. 静态属性
- 使用static定义的属性同样属于类,通过范围解析操作符::访问(如ClassName::$staticProperty),不可通过对象操作符->访问。
- 静态属性在所有实例间共享,且可通过变量动态引用类名(如$var = 'ClassName'; $var::$property),但变量值不能为保留字(如self、parent)。
- 示例中,Foo::$my_static可直接输出,而$foo->my_static会触发未定义属性警告。
3. 静态变量
在函数内部使用static声明的变量仅初始化一次,函数调用结束后保留其值,常用于计数或缓存场景。
4. 后期静态绑定
通过static在继承链中动态确定调用的类(如static::method()),区别于self::的固定绑定。
关键注意事项
- 静态成员通过类名直接访问,适合工具类或无需实例的场景。
- 混淆静态与非静态调用会导致兼容性问题(PHP版本差异)。
- 静态属性访问需严格使用::,避免误用->。
更多细节可参考PHP官方文档或《PHP视频教程》。