对不起这个问题,但我不明白这是怎么回事:
class Person {
public static $age = 1;
public function haveBirthday() {
static::$age +=1;
}
}
$joe = new Person;
$joe->haveBirthday();
echo Person::$age;
我不理解的是:
public function haveBirthday() {
static::$age +=1;
}
不应该返回 $ age,否则价值会丢失?为什么它仍然有效?
谢谢!
答案 0 :(得分:1)
您已将其定义为static
,这意味着它们是class level
个变量而非实例级别。
因此,当您致电$joe->haveBirthday();
时,它会更新class level
类的Person
变量,该变量可以使用Person::$age;
进行访问。
不需要返回静态变量,您可以直接从Class访问它。
答案 1 :(得分:0)
public static $age = 1;
表明这是一个静态属性,这意味着它是一个类属性,而不是一个实例。
答案 2 :(得分:0)
方法haveBirthday()
不会返回任何内容,只会增加静态变量$age
。
静态变量由此类的所有实例共享。因此,在您的情况下,这不是一个好主意,因为所有人都将拥有相同的年龄。
class Person {
public static $age = 1;
public function haveBirthday() {
static::$age +=1;
}
}
$joe = new Person;
$jane = new Person;
$joe->haveBirthday(); // +1 => 2
$jane->haveBirthday(); // +1 => 3
echo Person::$age; // Will return 3
测试here。