在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后,我不明白。
- 我们如何在PHP7.0中声明和调用公共类变量
- 我们如何编写此代码以使其在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;