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


Strict Standards: Accessing static property content::$total as non static

这是我的代码:

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>";

输出:


严格标准:访问静态属性内容::$total作为非静态属性,位于C:''Users''jodi''Documents''Visual Studio 2013''Projects''FinalProject''index.php第10行

内容对象([text]=>hai[total]=>0)
content对象([text]=>hai[total]=>0)

CCD_ 1没有改变。出现错误。-,-

如何增加$total

有别的办法吗??

问题来自于在构造函数中将变量$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++;
    }
}