对于 属性
来说
类内部的调用方式
-
静态属性
是类的属性 -
普通属性
是类具体实例化出的对象的属性 -
所以二者是完全不同的,
调用方式
也非常不同- 静态属性
self::$静态属性名
、类名::$静态属性名
- 普通属性
$this->普通属性名
- 静态属性
类外部的调用方式
-
静态属性
是类的属性 -
普通属性
是类具体实例化出的对象的属性 -
所以二者是完全不同的,
调用方式
也非常不同- 静态属性
类名::$静态属性名
- 普通属性
实例化对象->普通属性名
- 静态属性
对于 方法
来说
对于方法, 无论 普通
还是静态
, 它们都是属于类的, 所以理论上, 它们的调用方式 ->/::
是可以互换的, 但事实上, 还是应该严格区分, 否则可能会报 Deprecated...
;
类内部的调用方式
-
普通方法
可以使用$this->普通方法名()
来进行调用;- 也可以使用
self::$普通方法名()
- 也可以使用
-
静态方法
可以使用self::$静态方法名()
/类名::$静态方法名()
来进行调用;- 也可以使用
$this->$静态方法名()
- 也可以使用
- 即类内部
普通方法
和静态方法
的调用方式可以互换;
类外部的调用方式
-
普通方法
可以使用实例化对象->普通方法名()
来进行调用;- 注意: 使用
类名::普通方法名()
/实例化对象::普通方法名()
都会报Deprecated:非静态方法不应该按照镜头盖方法的调用方式来使用
- 注意: 使用
-
静态方法
可以使用类名::$静态方法名()
来进行调用;- 注意:静态方法也可以使用
实例化对象->普通方法名()
来进行调用; (静态属性不可以)
- 注意:静态方法也可以使用
静态/非静态方法中的调用权限
- 静态方法中只能使用 静态调用方式
::
来调用静态属性
,静态方法
,非静态方法
; 不能使用::
调用非静态属性
; - 非静态普通方法中可以调用
静态/非静态
的属性/方法
;
小结
- 静态属性/方法, 只能通过
::
来访问; - 普通属性只能通过
->
来访问; - 普通方法能通过
->/::
来访问; (类外部只能通过->
)