Почему магические методы PHP должны быть публичными? - PullRequest
5 голосов
/ 22 ноября 2011

Я использую магические методы в своих классах PHP, но когда я пытаюсь сделать их приватными, меня предупреждают:

ПРЕДУПРЕЖДЕНИЕ: магический метод __get () должен иметь публичную видимость и не может быть статическимin ...

Я бы не хотел использовать эти методы в автозаполнении Eclipse.(возможно, с phpdoc?) Итак, мой вопрос: почему эти методы должны быть публичными?

1 Ответ

7 голосов
/ 22 ноября 2011

Поскольку вы вызываете методы из области за пределами класса.

Например:

// this can be any class with __get() and __set methods
$YourClass = new YourOverloadableClass();

// this is an overloaded property
$YourClass->overloaded = 'test';

Код выше "преобразован" в:

$YourClass->__set('overloaded', 'test');

Позже, когда вы получите значение свойства, как:

$var = $YourClass->overloaded;

Этот код "конвертируется" в:

$YourClass->__get('overloaded');

В каждом случае магический метод __get и __set вызывается извне класса, поэтому эти методы должны быть public.

...