这是我的代码:
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
?
还有其他选择吗?
答案 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++;
}
}