В PHP это проблема для вызова статической функции класса с помощью -> разыменования - PullRequest
6 голосов
/ 24 ноября 2010

Я использую PHP 5.2

У меня есть следующий код:

class MyClass {
    public function __construct() {}

    public static function stuff() {
        echo 'This is static! <br />';
    }

}

$myClass = new MyClass();

MyClass::stuff(); // Reference by class.

$myClass->stuff(); // Reference by instance of class.

Вывод работает в обоих случаях, вот вывод:

Этостатичен!

статичен!

Существует ли проблема при использовании второго способа ссылки по сравнению с первым?

Так как ямне не разрешено иметь нестатическую функцию с такой же сигнатурой, как у статической сигнатуры выше, которая не будет проблемой.Я хочу, чтобы функция была статической, потому что при использовании статических функций также происходит повышение скорости.

Я что-то упустил или это единственная проблема, касающаяся семантики того, что синтаксис разыменования -> не указываетстатическая функция?

1 Ответ

6 голосов
/ 24 ноября 2010

документы явно говорят, что все в порядке:

Свойство, объявленное как статическое, не может быть доступным с экземпляром класса объект (хотя статический метод может).

Тем не менее, проще использовать ::. Я также подвергаю сомнению идею, что статический метод значительно быстрее, особенно когда никакие поля экземпляра не используются. Вы должны выполнить профилирование до того, как начнете изменять семантику вашего приложения для производительности.

...