tjm*_*tjm 10 php methods lazy-loading
我有一个类有一些相当大的方法.在它的基本和最常见的状态中,大多数功能都不是必需的,所以我想知道是否有一种延迟加载只是部分类的方法.该方法需要能够访问私有/受保护的成员,使这将是理想的,如果该方法是原产于类,但是在寻找其他的解决方案,我碰上了这其中讨论在回调中使用私有成员这将是一个可行的解决方案(我将使用包含调用回调和延迟加载类的函数的单独类.那是2009年,以及这个功能是否已经在PHP的更高版本中删除了我不知道,但它似乎不适用于5.3.5
有没有办法做到这一点,或者你对我应该看的其他模式有什么建议吗?
谢谢.
哇!感谢所有的答案.我认为你们中有很多人认为这是一个可能的过早优化,或者更糟糕的是,根本不是优化是非常有效的,我将进行分析以检查我所解决的任何解决方案实际上是否有助于不伤害....现在正确阅读和消化你的所有想法.再次感谢.
从PHP 5.4开始,您可以(重新)绑定匿名函数和闭包:
<?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"
Run Code Online (Sandbox Code Playgroud)
有关Closure实现和潜在问题的讨论,请参阅https://wiki.php.net/rfc/closures/object-extension.
通常,如果您发现您的类有很多长方法,请尝试将它们分解为更小的块.用简单的英语描述这些方法的用途.为每个"和"创建一个新方法并将代码移动到那里.
还要看看该类中的各种属性.如果其中一些在概念上一起进行,请考虑将它们变成自己的对象.将访问这些属性的任何方法移动到新对象以进行内聚.
我也有点质疑你想要在课堂上"懒惰加载"方法的动机.将它们放在那里没有性能上的复杂性,即使你不使用它们也是如此.如果这是用于性能优化,那么您可能正在从错误的一端接近它.