# 概述
static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为"类属性"或"类方法"
# 静态属性静态属性不可以由对象通过 -> 操作符来访问。
# 静态方法里不能使用$this标识调用静态方法
静态方法是属于类的,被每个类的实例所共享。由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
静态方法随着类的加载而加载,静态方法是优先于对象而存在的。当我们加载一个类的时候,对象还没有存在,而this代表的是对象的引用,试问当我们加载类的时候对象都没有,又怎么可以使用this呢?答案显而易见
this是指当前对象(相当于一个句柄),静态方法是通过类调用的方法,不需要实例化,既然不需要实例化,就没有当前对象,既然没有当前对象,就不会有this
# 普通方法调用静态方法
```
$thisself
parent
```
# 静态方法调动成员 静态方法不能调用非静态属性 。不能使用self::调用非静态属性。 但是可以调用不含$this标识的非静态方法。 ````// 实现最大值比较的Math类。
class Math { public function Max($num1, $num2) { return $num1 > $num2 ? $num1 : $num2; } public static function Max3($num1, $num2, $num3) { $num1 = self::Max($num1, $num2); $num2 = self::Max($num2, $num3); $num1 = self::Max($num1, $num2); return $num1; } }```
> 当一个类中有非静态方法被self:: 调用时,系统会自动将这个方法转换为静态方法。
# 总结:
在PHP中 所有全局变量都存储于静态内存区(但他们并不是静态变量)。
普通局部变量,一旦函数执行完毕就销毁,但是静态变量不会(局部变量,离开函数后就销毁了)。
静态类属性就更牛了,不光不会销毁,还可以被其他局部环境所调用。(静态变量虽然没有销毁,但是只能在定义它的函数内使用)