我在互联网上看到了这个地方。不记得在哪里,但我试了一下,它的工作原理。它应该允许顺序执行功能。这个php符号叫什么?
Chmod('file', 0777).chroot('file','root').redirect('/') ;
通过添加'。'在我的函数调用后,我可以立即执行另一个函数。我已经搜索了整个互联网,但问题是我不知道它是什么,所以我决定在这里问。我想阅读完整的文档。
我在互联网上看到了这个地方。不记得在哪里,但我试了一下,它的工作原理。它应该允许顺序执行功能。这个php符号叫什么?
Chmod('file', 0777).chroot('file','root').redirect('/') ;
通过添加'。'在我的函数调用后,我可以立即执行另一个函数。我已经搜索了整个互联网,但问题是我不知道它是什么,所以我决定在这里问。我想阅读完整的文档。
这不是一个“符号”,只是一个奇怪的利用串联运算符(点)。
它基本上利用PHP的type-juggling,将每个函数返回值转换为一个字符串。
chmod()
和chown()
将返回布尔值,隐式转换为空字符串。
redirect()
是一个可能由框架提供给您的函数,并且很可能返回void(即注释),该函数再次被转换为空字符串。
它不适用于返回数组的函数或不执行__toString()
magic method的对象 - 唯一不能被转换为string
的值类型。
下会更有意义:
$value = Chmod('file', 0777).chroot('file','root').redirect('/') ;
...只有你不真正关心$value
,你知道会是一个无用的空字符串。
我假设你觉得它“很好”,并给出我的解释,可能会认为它也是“聪明的”,但它在技术上是错误的。
用分号代替点会做“正确的方式”。只是我们习惯于将点读为其他语言的方法链,因此与分号相比,它们更容易阅读。
所以,当别人称之为“丑陋”时不要惊讶 - 你不应该这样做,它在技术上是一个“黑客”。
非常感谢,今天我学到了一些新东西。不能保证我不会使用它。这非常方便:) –
不能真的责怪你。我做了类似的事情,将默认值分配给可能不存在的变量:'isset($ foo)|| $ foo ='bar';' – Narf
你不能在PHP中这样做。点号.
运算符只表示语言中的一件事,即串联字符串。
你可以做一个方法链,它是类似的。这是通过返回$this
从每个非最终(这意味着它应该返回实际结果或作出最终行动)方法在类中实现的。
“方法链接” – tkausl
在jquery中它被称为“方法链接” – SuperDJ
它实际上是有效的PHP而不是方法链接,请参阅我的答案。 – Narf