在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后,我无法理解。
评论后修改:
那么为什么非静态方法的静态调用适用于5.6?
答案 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;