2016-12-06 63 views
1

我在互联网上看到了这个地方。不记得在哪里,但我试了一下,它的工作原理。它应该允许顺序执行功能。这个php符号叫什么?

Chmod('file', 0777).chroot('file','root').redirect('/') ; 

通过添加'。'在我的函数调用后,我可以立即执行另一个函数。我已经搜索了整个互联网,但问题是我不知道它是什么,所以我决定在这里问。我想阅读完整的文档。

+1

“方法链接” – tkausl

+0

在jquery中它被称为“方法链接” – SuperDJ

+0

它实际上是有效的PHP而不是方法链接,请参阅我的答案。 – Narf

回答

2

这不是一个“符号”,只是一个奇怪的利用串联运算符(点)。

它基本上利用PHP的type-juggling,将每个函数返回值转换为一个字符串。

chmod()chown()将返回布尔值,隐式转换为空字符串。
redirect()是一个可能由框架提供给您的函数,并且很可能返回void(即注释),该函数再次被转换为空字符串。

它不适用于返回数组的函数或不执行__toString() magic method的对象 - 唯一不能被转换为string的值类型。

下会更有意义:

$value = Chmod('file', 0777).chroot('file','root').redirect('/') ; 

...只有你不真正关心$value,你知道会是一个无用的空字符串。

我假设你觉得它“很好”,并给出我的解释,可能会认为它也是“聪明的”,但它在技术上是错误的。

用分号代替点会做“正确的方式”。只是我们习惯于将点读为其他语言的方法链,因此与分号相比,它们更容易阅读。

所以,当别人称之为“丑陋”时不要惊讶 - 你不应该这样做,它在技术上是一个“黑客”。

+0

非常感谢,今天我学到了一些新东西。不能保证我不会使用它。这非常方便:) –

+0

不能真的责怪你。我做了类似的事情,将默认值分配给可能不存在的变量:'isset($ foo)|| $ foo ='bar';' – Narf

0

你不能在PHP中这样做。点号.运算符只表示语言中的一件事,即串联字符串。

你可以做一个方法链,它是类似的。这是通过返回$this从每个非最终(这意味着它应该返回实际结果或作出最终行动)方法在类中实现的。