懒惰在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.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...