У меня есть код ниже
class MyClass
{
public static $count = 0;
public static function plusOne()
{
return "The count is " . ++self::$count . ".<br />";
}
}
$obj = new MyClass;
$obj->plusOne(); //Works proper for static function
echo '<br/>'.MyClass::$count; // count: 1
MyClass::plusOne(); //Works proper for static function
echo '<br/>'.MyClass::$count; // count: 2
----OUTPUT------
1
2
----------------
У меня есть доступ к статическому методу путем создания объекта (используя ->) и с помощью оператора разрешения области (используя: 🙂 Метод работает правильно
Но когда я пытаюсь использовать статическое свойство по разрешению области (используя ::), оно не работает. ниже приведен дополнительный код.
$ Obj-> подсчитывать; // Обратите внимание: неопределенное свойство: MyClass :: $ count
У меня есть доступ к статическому методу путем создания объекта (используя ->) и с помощью оператора разрешения области видимости (используя: 🙂 НО все равно количество статических свойств увеличивается ПОЧЕМУ?
Почему разные правила доступа для статического свойства (only ::) и метода (by ->,: :)?
В вашем примере это выглядит странно, но представьте, если у вас также было
class MyOtherClass
{
public $count = 0;
public function plusOne()
{
return "The other count is " . ++$this->count . ".<br />";
}
}
Теперь, если вы хотите сделать
$obj->plusOne();
Вы можете сделать это, и это будет работать независимо от того, является ли $ obj MyClass или MyOtherClass. Детали реализации на данном этапе не важны, если вы их уже не знаете, например. вы можете использовать MyClass :: plusOne () без его создания, потому что вы знаете, что это статический метод.
Статические переменные всегда являются статическими, как объявлено. Данные об экземпляре отсутствуют, поэтому независимо от того, какую область вы используете, вы обновляете статический счетчик.
Других решений пока нет …