2

对于 属性 来说

类内部的调用方式

  1. 静态属性的属性
  2. 普通属性类具体实例化出的对象的属性
  3. 所以二者是完全不同的, 调用方式也非常不同

    • 静态属性 self::$静态属性名类名::$静态属性名
    • 普通属性 $this->普通属性名

类外部的调用方式

  1. 静态属性的属性
  2. 普通属性类具体实例化出的对象的属性
  3. 所以二者是完全不同的, 调用方式也非常不同

    • 静态属性 类名::$静态属性名
    • 普通属性 实例化对象->普通属性名

对于 方法 来说

对于方法, 无论 普通还是静态, 它们都是属于类的, 所以理论上, 它们的调用方式 ->/:: 是可以互换的, 但事实上, 还是应该严格区分, 否则可能会报 Deprecated...;

类内部的调用方式

  1. 普通方法 可以使用 $this->普通方法名() 来进行调用;

    • 也可以使用 self::$普通方法名()
  2. 静态方法 可以使用 self::$静态方法名() / 类名::$静态方法名() 来进行调用;

    • 也可以使用 $this->$静态方法名()
  3. 即类内部 普通方法静态方法 的调用方式可以互换;

类外部的调用方式

  1. 普通方法 可以使用 实例化对象->普通方法名() 来进行调用;

    • 注意: 使用 类名::普通方法名() / 实例化对象::普通方法名() 都会报 Deprecated:非静态方法不应该按照镜头盖方法的调用方式来使用
  2. 静态方法 可以使用 类名::$静态方法名() 来进行调用;

    • 注意:静态方法也可以使用 实例化对象->普通方法名() 来进行调用; (静态属性不可以)

静态/非静态方法中的调用权限

  1. 静态方法中只能使用 静态调用方式::来调用 静态属性, 静态方法, 非静态方法; 不能使用::调用非静态属性;
  2. 非静态普通方法中可以调用 静态/非静态属性/方法;

小结

  1. 静态属性/方法, 只能通过 :: 来访问;
  2. 普通属性只能通过 -> 来访问;
  3. 普通方法能通过 ->/:: 来访问; (类外部只能通过->)

@
795 声望113 粉丝

睹物思人~~