是否可以将方法属性从公共更改为私有,然后在运行时从类内部更改回来?

发布于 2024-09-10 19:51:42 字数 141 浏览 3 评论 0 原文

像这样: if ($sth) make_private($this->method);

或者也许还有其他方法可以影响方法的可访问性?

问题是我编写了一个必须调用一次方法的类,因此我需要代码来限制在执行该方法后从类外部访问给定方法。

like this:
if ($sth) make_private($this->method);

or maybe there's some other way to affect accessibility of methods ?

Problem is that I written a class where methods must be called once, so I need code to restrict access to given method from outside the class after this method was executed.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鸵鸟症 2024-09-17 19:51:46

在该方法中执行此操作的简单方法(限制为一次调用):

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

     // your code
}

Simple way to do so within the mothod (restrict to one call):

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

     // your code
}
昨迟人 2024-09-17 19:51:45

您有几个更好的选择:

  1. 使用类本身中的一些静态变量处理“只能调用一次”,并抛出清晰的异常。
  2. 如果您无法更改类/对象本身,请使用装饰器对象处理“只能调用一次”。

您建议的非常不受欢迎的方式是可能的,请参阅 classkit_method_redefinerunkit_method_redefine,但代表任何可能的人将来处理您的代码:请不要使用它。

You've got several better options:

  1. Handle the 'can only be called once' with some static state variable in the class itself, and throw legible exceptions.
  2. Handle the 'can only be called once' with a decorator object if you cannot alter the class/object itself.

The very undesirable way you suggest is possible, see classkit_method_redefine or runkit_method_redefine, but on behalf of anyone possibly working on your code in future: please do not use it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文