加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

懒惰在PHP中加载类方法

发布时间:2020-12-13 16:01:55 所属栏目: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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读