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 后,我不明白。
- 我们如何在PHP 7.0 中声明和调用public class 变量?
- 我们如何编写此代码以在 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()
语法来调用祖先的方法。
在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 后,我不明白。
- 我们如何在PHP 7.0 中声明和调用public class 变量?
- 我们如何编写此代码以在 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()
语法来调用祖先的方法。