🧙♂️ 诸位好,吾乃诸葛妙计,编程界之翘楚,代码之大师。算法如流水,逻辑如棋局。
📜 吾之笔记,内含诸般技术之秘诀。吾欲以此笔记,传授编程之道,助汝解技术难题。
📄 吾之文章,不以繁复之言,惑汝耳目;但以浅显之语,引汝入胜。
🚀 若此文对阁下有所裨益,敬请👍🏻-点赞 ⭐ - 收藏 👀 - 关注,不胜感激。
在PHP中,类方法可以被声明为静态的(static)或者非静态的。这两者之间有几个关键的区别:
-
静态方法(Static methods):
例如:
-
静态方法属于类本身,而不是类的实例。这意味着你可以在没有创建类的实例的情况下调用静态方法。
-
静态方法使用
self::
来引用类内部的其他静态方法或属性,而非静态方法使用$this->
来引用类的实例方法或属性。 -
静态方法不能访问类的非静态属性,因为这些属性属于类的实例。
-
静态方法通常用于工具类或帮助函数,这些方法不需要访问对象的状态。
-
class MyClass {
public static function myStaticMethod() {
// 静态方法体
}
}
// 调用静态方法,不需要创建类的实例
MyClass::myStaticMethod();
非静态方法(Instance methods):
-
非静态方法属于类的实例,你必须创建一个类的实例才能调用这些方法。
-
非静态方法可以访问类的所有属性和方法,无论它们是静态的还是非静态的。
-
非静态方法通常用于操作或访问对象的状态(即对象的属性)。
例如:
class MyClass {
public function myInstanceMethod() {
// 非静态方法体
}
}
// 创建类的实例,然后调用非静态方法
$myObject = new MyClass();
$myObject->myInstanceMethod();
-
上下文作用域:
-
在静态方法中,没有
$this
伪变量,因为$this
代表当前对象的实例,而静态方法不属于任何实例。 -
在非静态方法中,可以使用
$this
来引用当前对象的实例。
-
-
调用方式:
-
静态方法通过类名直接调用,如
ClassName::methodName()
。 -
非静态方法通过对象实例调用,如
$object->methodName()
。
-
-
设计模式和用途:
-
静态方法适合实现不依赖于对象状态的功能,例如工具函数或单例模式。
-
非静态方法适合实现依赖于对象状态的行为,它们可以访问和修改对象的属性。
-
在设计类和方法时,应该根据是否需要访问对象的状态来决定使用静态方法还是非静态方法。静态方法和属性也可以被子类继承和覆盖(override),但是它们的行为与非静态成员有所不同,因为静态成员不依赖于具体的对象实例。
👑 阁下若觉此文有益,恳请施以👍🏻-点赞 ⭐ - 收藏 👀 - 关注之礼,以资鼓励。倘若有疑问或建言,亦请在评论区💬评论 赐教,吾将感激不尽。