严格标准:访问静态属性内容:: $ total为非静态

时间:2014-11-03 05:31:25

标签: php

这是我的代码:

class content
{
    public $text;
    public static $total;

    function __construct($content){
        $this->text = $content;
        $this->total = 0;
    }

    public static function vote(){
        self::$total++;
    }

}


$foo = new content("hai");
echo "<pre>";
print_r($foo);
echo "</pre>";

$foo::vote();

echo "<pre>";
print_r($foo);
echo "</pre>";

输出:


严格标准:在 C:\ Users \ jodi \ Documents \ Visual Studio 2013 \ Projects \ FinalProject \ FinalProject \ index.php 在线 10

content Object
(
    [text] => hai
    [total] => 0
)
content Object
(
    [text] => hai
    [total] => 0
)

$total没有变化。 并得到错误。 - , -

如何增加$total

还有其他选择吗?

1 个答案:

答案 0 :(得分:3)

问题来自于在构造函数中引用变量$total作为对象变量,因为您已将其声明为static,这是一个类变量。
由于我不知道你的设计背后的想法,你有(至少)两个选择:
选项1:
如果需要$total作为类变量,请从构造函数中删除初始化。您可以定义默认值0并使用对象方法获取类变量的值,即

class content
{
    public $text;
    public static $total = 0;

    function __construct($content){
        $this->text = $content;
    }

    public function getTotal() {
        return self::$total;
    }

    public static function vote(){
        self::$total++;
    }

}

选项2:
如果你真的不需要它作为一个类变量,而是一个对你实例化的每个对象都不同的字段,那就去除static并将vote()方法声明为对象方法:

class content
{
    public $text;
    public $total;

    function __construct($content){
        $this->text = $content;
        $this->total = 0;
    }

    public function vote(){
        $this->total++;
    }

}