📜  ::update() 不应被静态调用 - PHP (1)

📅  最后修改于: 2023-12-03 14:59:01.836000             🧑  作者: Mango

关于 '::update() 不应被静态调用 - PHP'

在 PHP 中,'::update()' 是一个类方法,应该通过实例对象来调用。如果在调用时使用静态方法,会收到以下错误信息:

Non-static method update() should not be called statically

这个错误通常是由一个静态方法尝试调用一个非静态方法而引起的。

静态方法和非静态方法的区别

静态方法和非静态方法,顾名思义,它们的区别在于是否依赖于实例对象。

静态方法只能访问类的静态成员和静态方法,而不能访问实例对象的非静态成员和非静态方法。因为静态方法可以在实例对象被创建之前就已经被调用了,所以它们无法访问实例对象的属性和方法。

非静态方法则必须被用一个实例对象来调用,它们可以访问实例对象的属性和方法,以及类的静态成员和静态方法。

如何避免 '::update() 不应被静态调用 - PHP'

要避免 '::update() 不应被静态调用 - PHP' 错误,你应该:

  1. 确认你正在调用的方法是一个非静态方法。如果不是,你需要将其转换为实例方法。
  2. 创建一个实例对象,并使用它来调用该方法。

例如:

// 定义一个类
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' 的错误,并且你需要将其转换为实例方法或传递一个实例对象。