微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

懒惰在PHP中加载类方法

我有一个类有一些相当大的方法.在它的基本和最常见的状态下,大部分功能并不是必需的,所以我想知道是否有一种方法来加载类的一部分.这些方法需要能够访问私有/受保护的成员,因此如果这些方法是本地的,那么这个方法是理想的,但是在寻找其他解决方案的时候,我在 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.

原文地址:https://www.jb51.cc/php/133045.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐