类公共变量调用在PHP 7.0和PHP 5.6中兼容

toe*_*lab -1 php class public php-7

在PHP 5.6中:

当我在一个类中时,我们通常会声明并调用这样的公共类变量:

class MyClass
{
    /**
     * @var int
     */
    public $myVar = 0;

    // call it in a public function:
   public function myFunction()
   {
       return $this->myVar;
   }

}
Run Code Online (Sandbox Code Playgroud)

我把这个函数称为:

MyClass::myFunction();
Run Code Online (Sandbox Code Playgroud)

在PHP 7.0中,该代码抛出致命错误:

不在对象上下文中时使用$ this

将我的PHP版本再次更改回5.6后,错误消失了.

问题:

我必须承认,在阅读手册并从5.6更改为7.0后,我不明白.

  1. 我们如何在PHP 7.0中声明和调用公共类变量?
  2. 我们如何编写此代码以在5.6和7.0之间兼容?

评论后编辑:

那么为什么静态调用非静态方法的工作原理是5.6?

Dev*_*ots 5

在我加载可能func()像这样:

 obj::func();  // Wrong, it is not static method
Run Code Online (Sandbox Code Playgroud)

但也可以

$obj = new Obj();  // correct
$obj->func();
Run Code Online (Sandbox Code Playgroud)

您无法以这种方式调用方法,因为它不是静态方法.

obj::func();
Run Code Online (Sandbox Code Playgroud)

您应该使用:

obj->func();
Run Code Online (Sandbox Code Playgroud)

但是,如果您创建了一个静态方法,例如:

static $foo; // your top variable set as static

public static function foo() {
    return self::$foo;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以用这个:

obj::func();
Run Code Online (Sandbox Code Playgroud)