咨询电话:
15628812133
17
2024/05

PHP调用类里面的方法的时候报错Using $this when not in object context是什么原因

发布时间:2024-05-17 13:46:03
发布者:已经写了
浏览量:
0

最近在开发新的建站系统的时候,使用PHP写代码的时候报错Using $this when not in object context是什么原因呢,大概的解释一下就是$this在静态方法中使用了,听起来似懂非懂的样子,下面就稍微详细的解释一下原因,和处理方式吧。

首先介绍一下静态方法和非静态方法的区别和使用方式:

1、实例化要求:

    非静态方法:必须先实例化,然后通过该实例来调用非静态方法。

    静态方法:不需要创建类的实例,可以直接通过类名来调用静态方法。

2、$this 关键字

    非静态方法:可以使用 $this 关键字来引用当前对象实例,访问其属性和调用其方法。

    静态方法:不能使用 $this 关键字,因为静态方法不与任何特定的对象实例关联。(这就是报错的真实原因)

3、继承与覆盖:

    非静态方法:子类可以覆盖父类的非静态方法。当通过子类实例调用被覆盖的方法时,将执行子类中的方法(多态性)。

    静态方法:子类也可以覆盖父类的静态方法,但行为略有不同。通过子类名调用静态方法将执行子类中的方法,但通过父类名调用将仍然执行父类中的方法(除非在子类中使用 parent:: 显式调用父类的静态方法)。

在稍微细讲一下实例化调用:

1、实例化调用与静态调用:

image

2、访问属性:

    实例化对象可以访问和修改其非静态属性(包括私有、受保护和公共属性)。

    静态方法不能直接访问非静态属性,因为它们与任何特定的对象实例都不关联。但是,它们可以访问静态属性。

3、$this:

    在非静态方法中,你可以使用 $this 关键字来引用当前对象实例。

    静态方法中不能使用 $this 关键字,因为它们不与任何特定的对象实例关联。

4、继承

    如果子类覆盖了父类的非静态方法,那么当你通过子类实例调用该方法时,将执行子类中的方法(多态性)。

    如果子类覆盖了父类的静态方法,那么通过子类名调用该方法将执行子类中的方法,但通过父类名调用将仍然执行父类中的方法。

结论:报错Using $this when not in object context 的两种解决方式

1、先实例化,在调用方法

2、修改类中的$this调用改为self::调用

关键词:
返回列表