php class oop 使用$this-> 问题探讨问题描述:在php 中,使用$this-> 访问成员属性时,执行b::ccc() 会出现using $this when not in object c" />
登录
首页 >  文章 >  php教程

PHP 类中使用 $this-> 访问成员属性为何在静态方法中会报错?

时间:2024-10-29 19:09:59 224浏览 收藏

从现在开始,努力学习吧!本文《PHP 类中使用 $this-> 访问成员属性为何在静态方法中会报错?》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

PHP 类中使用 $this-> 访问成员属性为何在静态方法中会报错? 访问成员属性为何在静态方法中会报错?" />

php class oop 使用$this-> 问题探讨

问题描述:

在php 中,使用$this-> 访问成员属性时,执行b::ccc() 会出现using $this when not in object context 的错误,但执行a::fff() 却可以成功。

解答:

要解决这个问题,请确保使用较新版本的 php(>=7.0)并使用正确的编码方式。虽然代码中还存在其他问题,但以下分析将分解代码并详细解释该错误的原因。

php 版本问题:

在php 7 和更高版本中,由于php不再允许在静态方法中使用$this访问属性,因此该代码将无法工作。

示例代码简化:

为了便于理解,将示例代码简化如下:

class A {
  protected $message;

  public function ccc() {
    return B::bbb();
  }

  public function fff() {
    return $this->message['userError'];
  }
}

class B {
  protected $message;

  public function bbb() {
    return $this->message['userError'];
  }
}

代码运行情况:

  • 在php 5 和7 中,无论调用a::ccc(), a::fff(), 还是b::bbb() 都可以运行成功。
  • 在 php 4 中,代码也能运行成功,但需要移除 php 4 中不支持的特性。
  • 在 php 8 中,仅能运行a::fff(), 因为a::ccc()和b::bbb()都会由于$this访问而导致错误。

$this 指向问题:

在 a::ccc() 中调用 b::bbb() 时,this 实际上指向 a 类。这是因为 php 允许在静态方法中访问非静态属性,而这在较新版本的 php 中已被弃用。

解决方案:

要解决这个问题,请避免在静态方法中使用$this,并使用类名代替当前类(例如,b::bbb () 应改为a::bbb())。

理论要掌握,实操不能落!以上关于《PHP 类中使用 $this-> 访问成员属性为何在静态方法中会报错?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>