Извините за вопрос, но я не понимаю, как это работает:

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, иначе значение потеряно? Почему все еще работает?

Благодарность!

1
Jmoon.C 7 Сен 2016 в 16:41

3 ответа

Лучший ответ

Вы определили его как static, что означает, что это переменные class level, а не уровень экземпляра.

Поэтому, когда вы вызываете $joe->haveBirthday();, он обновляет переменную class level класса Person, к которому можно получить доступ с помощью Person::$age;.

Статические переменные не нужно возвращать, вы можете получить к ним доступ прямо из класса.

1
Alok Patel 7 Сен 2016 в 13:44

public static $age = 1; предполагает, что это статическое свойство, что означает, что это свойство класса, а не экземпляра.

0
Okneloper 7 Сен 2016 в 13:43

Метод 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

Протестируйте его здесь.

0
Al Foиce ѫ 7 Сен 2016 в 13:49