class public 变量调用在 PHP 7.0 和 PHP 5.6 中兼容

class public variable calls compatible in PHP 7.0 and PHP 5.6

在PHP 5.6:

当在 class 中时,我们通常这样声明和调用 public class 变量:

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

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

}

我这样调用函数:

MyClass::myFunction();

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

Using $this when not in object context

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

问题:

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

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

评论后编辑:

那么为什么对非静态方法的静态调用在 5.6 中有效?

In I'm loading maybe func() like this:

 obj::func();  // Wrong, it is not static method

but can also be

$obj = new Obj();  // correct
$obj->func();

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

obj::func();

您应该改用:

obj->func();

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

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

public static function foo() {
    return self::$foo;
}

那么你可以使用这个:

obj::func();

您可以通过实例化 class 的对象然后调用 class 的方法来完成相同的操作。

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

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

}
$obj = new Myclass();
$result = $obj->myFunction();
print $result;

您描述的行为可以在以下示例中找到:

<?php

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

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

class MyClass2
{
  /**
   * @var int
   */
  public $myVar = 2;

  public function test()
  {
    echo MyClass::myFunction();
    // outputs: 2
  }
}


$obj = new MyClass2();
$obj->test();
?>

在 PHP 5 中,当您在一个实例中时,您可以调用其他 class 的 public 方法。它将像当前 $this 上下文中 class 的成员一样工作。 PHP 7 更严格。您可以扩展 classes 或将特征导入 classes 中不同的继承线。没有必要使用其他 classes 的方法。您仍然可以使用 Classname::method()parent::method() 语法来调用祖先的方法。