PHP方法链接的好处?

PHP method chaining benefits?

提问人:Jeff 提问时间:12/30/2009 更新时间:7/20/2014 访问量:1442

问:

仍然在 PHP-OOP 训练轮上,这个问题可能属于 failblog.org。=)

PHP 中方法链有什么好处?

我不确定这是否重要,但我将静态调用我的方法。例如

$foo = Bar::get('sysop')->set('admin')->render();

从我所读到的内容来看,任何返回的方法都是允许链接的。我刚刚了解到这是 PHP5 中的新功能。在我看来,如果我不必实例化一个全新的对象(静态调用它)并且只需从类中选择我需要的几个方法,可能会有速度优势?$this

我有这个权利吗?

PHP OOP 方法链接

评论

0赞 CaffGeek 12/30/2009
它被称为“流畅的界面”,它并不新鲜,只是在 PHP5 之前显然不起作用 devzone.zend.com/article/1362
0赞 Pekka 12/30/2009
现在可行吗?可爱!不知道。

答:

7赞 Victor Nicollet 12/30/2009 #1

使用这两种方法都没有显著的性能优势,尤其是在具有字节码缓存的生产服务器上。

方法链只是一种更短的编写方式。与加长版相比:

$foo = Bar::get('sysop');
$foo -> set('admin');
$foo -> render();

不过,它确实有一些怪癖:典型的IDE(如Eclipse)可以在较长版本中自动完成代码(只要类型已知),但需要记录所有方法的返回类型才能在短版本中工作。$foo

评论

0赞 hanshenrik 4/20/2019
我对它做了一些基准测试,在装有 PHP 7.1.16 的笔记本电脑上,在我的 i7-6700 上以节电模式使用电池时,返回 $this 而不是返回 void 似乎慢了大约 17 纳秒,基准代码可以在这里找到:github.com/Znote/POTCP/commit/......
1赞 Lucas Oman 12/30/2009 #2

它仍然实例化一个对象;它只是从未分配给变量。基本上,你只是调用一个匿名对象的方法。

我认为任何周期节省都可以忽略不计,但我认为未分配的对象会在这行代码之后立即释放,因此您可能会节省一些内存(您可以通过将分配的对象设置为完成它们的时间来实现相同的目的)。null

人们使用方法链接的主要原因是为了方便;你在一行代码中做了很多事情。就我个人而言,我认为它很混乱且无法维护。

0赞 AntonioCS 12/30/2009 #3

如果我不必实例化一个整体 new 对象(静态调用)和 只需选择我需要的几种方法 从班级?

错!要返回,必须实例化该类。$this