是否允许在PHP中链接调用方法?
|
例如,我有以下内容: class A{
__invoke(){
// return an instance of class A itself
}
}
我可以这样做吗? new A()()()()... or (new A())()()()... 这是什么解释? 好的,我可以再解释一下为什么我要问: class A{
public function __invoke($arg){
echo __METHOD__ . "($arg) called" . PHP_EOL;
}
}
$a = new A();
$a(0);
$a(1)(2)(3);
A::__invoke(0) called A::__invoke(1) called Fatal error: Function name must be a string (demo) 您可能对variable functions功能感到困惑.如果foo()返回’bar’字符串,则foo()()等于bar(): class A{
public function __invoke(){
return 'hello';
}
}
function hello($name) {
echo "Hello,$name!" . PHP_EOL;
}
$a = new A();
$a()('Jim');
Hello,Jim! (demo) 只要函数返回带有效函数名的更多字符串,您就可以链接它,但__invoke和类都不起任何相关作用: function one() {
return 'two';
}
function two() {
return 'three';
}
function three() {
return 'four';
}
function four() {
echo 'Done!';
}
$a = one()()()();
Done! (demo) 注意:上面的所有代码片段都需要PHP / 7,但只需使用适当的括号和中间变量就可以使用早期版本进行模拟. 根据UlrichEckhardt的评论更新:我忽略了返回A类本身评论的实例.如果你真的这样做,代码确实有效: class A{
public function __invoke($arg){
echo __METHOD__ . "($arg) called" . PHP_EOL;
return $this;
}
}
$a = new A();
$a(0);
$a(1)(2)(3);
class A{
public function __invoke($arg){
echo __METHOD__ . "($arg) called" . PHP_EOL;
return $this;
}
}
$a = new A();
$a(0);
$a(1)(2)(3);
(demo) 当然,这是PHP / 7语法.对于旧版本,您需要具有突破魔力的辅助变量: $a = new A(); $b = $a(1); $c = $b(2); $d = $c(3); $d(4); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
