这就是问题,如何从类函数中调用类变量?让我解释一下:
<?php
class Mine
{
private $g = 'gg';
const COSTANTE = 'valo';
public static function sayHello()
{
echo self::COSTANTE;
echo '<br>';
echo $this->g;
}
}
$h = new Mine();
$h->sayHello();
$h::sayHello();
?>
当我运行它时,它只打印常量COSTANTE ....为什么它不打印变量g?
答案 0 :(得分:1)
valo
将被打印,但gg
将不会。
问题是因为您在静态方法中使用了非静态变量,这会引发致命错误并将停止执行。这是因为没有对象上下文。
不鼓励在静态方法中使用非静态变量,但是如果你需要使用静态方法,则必须先创建一个对象。
您的sayHello
功能类似于
public static function sayHello()
{
echo self::COSTANTE;
echo '<br>';
$mineObject = new Mine;
echo $mineObject->g;
}
我还建议在开发过程中保持错误报告和显示错误,以便您可以更好地了解发生的事情。
error_reporting(E_ALL);
ini_set('display_errors', 'ON');
答案 1 :(得分:1)
启用错误报告(error_reporting ( E_ALL );),您会收到以下错误:
致命错误:不在对象上下文中时使用$ this
伪变量$this
是对调用对象的引用,可从对象上下文中获取。
self
用于访问当前类,因为静态函数可以在没有实际对象实例的情况下调用,当静态调用该方法时$this
引用不存在。
声明为static
的方法可以使用实例化的类对象访问(但它总是在静态上下文中执行),声明为static
的属性不能。