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

时间:2016-05-06 10:00:18

标签: 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;
   }

}

我这样称呼函数:

MyClass::myFunction();

在PHP 7.0中,该代码会引发致命错误:

  

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

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

问题:

我必须承认,在阅读手册并将其从5.6更改为7.0后,我无法理解。

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

    那么为什么非静态方法的静态调用适用于5.6?

3 个答案:

答案 0 :(得分:5)

  

我正在装载   像这样的func():

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

答案 1 :(得分:1)

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

<?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中,当您在实例中时,可以调用其他类的公共方法。它将工作,因为它是当前$ this上下文中的类的成员。 PHP 7更具有针对性。您可以将类扩展或将特征导入到不同继承行中的类中。没有必要加强其他课程。方法。您仍然可以使用Classname::method()parent::method()语法来调用祖先的方法。

答案 2 :(得分:0)

通过实例化该类的对象然后调用该类的方法来完成相同的操作。

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;