# 概述函数
static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,所以,这类属性或方法也称为"类属性"或"类方法"this
# 静态属性对象
静态属性不能够由对象经过 -> 操做符来访问。内存
# 静态方法里不能使用$this标识调用静态方法io
静态方法是属于类的,被每一个类的实例所共享。因为静态方法不须要经过对象便可调用,因此伪变量 $this 在静态方法中不可用。function
静态方法随着类的加载而加载,静态方法是优先于对象而存在的。当咱们加载一个类的时候,对象尚未存在,而this表明的是对象的引用,试问当咱们加载类的时候对象都没有,又怎么可使用this呢?答案显而易见class
this是指当前对象(至关于一个句柄),静态方法是经过类调用的方法,不须要实例化,既然不须要实例化,就没有当前对象,既然没有当前对象,就不会有this变量
# 普通方法调用静态方法引用
```
$this方法
self
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中 全部全局变量都存储于静态内存区(但他们并非静态变量)。
普通局部变量,一旦函数执行完毕就销毁,可是静态变量不会(局部变量,离开函数后就销毁了)。
静态类属性就更牛了,不光不会销毁,还能够被其余局部环境所调用。(静态变量虽然没有销毁,可是只能在定义它的函数内使用)