php类变量交互

时间:2014-11-30 20:00:13

标签: php class oop var

这就是问题,如何从类函数中调用类变量?让我解释一下:

    <?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?

2 个答案:

答案 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的属性不能。