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


class public variable calls compatible in PHP 7.0 and PHP 5.6

在PHP 5.6中:

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

class MyClass
{
    /**
     * @var int
     */
    public $myVar = 0;
    // call it in a public function:
   public function myFunction()
   {
       return $this->myVar;
   }
}

我这样调用函数:

MyClass::myFunction();

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

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

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

问题:

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

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

评论后编辑:

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

我可能在装货函数()如下:

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

但也可以是

$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();

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

<?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();
?>

在PHP5中,当您在实例内部时,您可以调用其他类的公共方法。在当前$this上下文中,它将作为类的成员工作。PHP 7更为死板。您可以在不同的继承行中扩展类或将特征导入到类中。没有必要强化其他类的方法。您仍然可以使用Classname::method()parent::method()语法来调用祖先的方法。

您可以通过实例化该类的对象,然后调用该类的方法来实现同样的目的。

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;