📅  最后修改于: 2023-12-03 14:59:01.836000             🧑  作者: Mango
在 PHP 中,'::update()' 是一个类方法,应该通过实例对象来调用。如果在调用时使用静态方法,会收到以下错误信息:
Non-static method update() should not be called statically
这个错误通常是由一个静态方法尝试调用一个非静态方法而引起的。
静态方法和非静态方法,顾名思义,它们的区别在于是否依赖于实例对象。
静态方法只能访问类的静态成员和静态方法,而不能访问实例对象的非静态成员和非静态方法。因为静态方法可以在实例对象被创建之前就已经被调用了,所以它们无法访问实例对象的属性和方法。
非静态方法则必须被用一个实例对象来调用,它们可以访问实例对象的属性和方法,以及类的静态成员和静态方法。
要避免 '::update() 不应被静态调用 - PHP' 错误,你应该:
例如:
// 定义一个类
class MyClass {
public function update() {
// ...
}
}
// 错误的用法(静态调用)
MyClass::update(); // 会收到 '::update() 不应被静态调用 - PHP' 错误
// 正确的用法(实例方法调用)
$obj = new MyClass();
$obj->update(); // now it works!
如果你确实需要在静态方法中使用非静态方法,你可以将其转换为静态方法,或者传递一个实例对象来调用该方法。例如:
class MyClass {
public static function update() {
$obj = new self(); // 创建实例对象
$obj->nonStaticMethod(); // 调用非静态方法
}
public function nonStaticMethod() {
// ...
}
}
在 PHP 中,静态方法和非静态方法的区别在于他们是否依赖于实例对象。如果你尝试通过静态方法访问非静态方法,你会收到一个 '::update() 不应被静态调用 - PHP' 的错误,并且你需要将其转换为实例方法或传递一个实例对象。