我有一个类有一些相当大的方法.在它的基本和最常见的状态下,大部分功能并不是必需的,所以我想知道是否有一种方法来加载类的一部分.这些方法需要能够访问私有/受保护的成员,因此如果这些方法是本地的,那么这个方法是理想的,但是在寻找其他解决方案的时候,我在
this中讨论了在回调中使用私有成员,这将是一个可行的解决方案我会使用单独的类,其中包含一个调用回调函数和延迟加载该类的函数).那是2009年,而且这个功能是否在以后版本的PHP中被删除,我不知道,但在5.3.5中似乎没有工作
有没有办法做到这一点,还是有什么建议我应该看的其他模式?
谢谢.
哇!感谢所有的答案.我想你们中的一些关于这是一个可能的过早优化,或者更糟糕的是,根本不是一个优化是非常有效的,我将进行分析,以检查我解决的任何解决方案实际上是不伤害.
…
现在阅读和消化你的想法正确.再次感谢.
从PHP 5.4起,你可以
(re-)bind Anonymous Functions and Closures:
<?PHP class Foo { private $bar = 1; } $getBar = function() { return $this->bar; }; $foo = new Foo; $foo->getBar = $getBar->bindTo($foo,$foo); echo call_user_func($foo->getBar); // prints "1"
请参阅https://wiki.php.net/rfc/closures/object-extension讨论关闭实施和潜在问题.
一般来说,如果你发现你的课程有很多很长的方法,那么尝试将它们分解成更小的块.用简单的英文描述什么方法.为每一个“和”创造一个新的方法,并在那里移动代码.
还可以看看该类中的各种属性.如果有些人在概念上一起走,那就考虑把它们变成自己的对象.将任何访问这些属性的方法移动到新对象以进行内聚.
我也有些质疑你想要“懒惰加载”方法进入课堂的动机.即使没有使用它们,也没有性能复杂化.如果这是一个性能优化,你可能会从错误的结果接近它.
另一个选择是使用Traits,甚至更简单的Composition.