возможно ли изменить свойство метода с открытого на приватное и обратно во время выполнения изнутри класса? - PullRequest
0 голосов
/ 19 июля 2010

вот так: if ($ sth) make_private ($ this-> method);

или, может быть, есть какой-то другой способ повлиять на доступность методов?

Проблема в том, что я написал класс, в котором методы должны вызываться один раз, поэтому мне нужен код, чтобы ограничить доступ к данному методу извне класса после выполнения этого метода.

Ответы [ 2 ]

5 голосов
/ 19 июля 2010

У вас есть несколько лучших вариантов:

  1. Обрабатывать 'можно вызывать только один раз' с некоторой статической переменной состояния в самом классе и генерировать четкие исключения.
  2. Обрабатывать 'можно вызывать только один раз' с объектом декоратора, если вы не можете изменить сам класс / объект.

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

0 голосов
/ 19 июля 2010

Простой способ сделать это в рамках способа (ограничить одним вызовом):

public function fooBar() {
     static $called;
     if (isset($called)) throw new Exception('Called already once!');
     $called = true;

     // your code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...