php 访问链接调用方法,是否允许在PHP中链接调用方法?

我不认为您描述的行为实际上有效,即使在PHP / 7中:

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

您可能对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!

只要函数返回带有效函数名的更多字符串,您就可以链接它,但__invoke和类都不起任何相关作用:

function one() {

return 'two';

}

function two() {

return 'three';

}

function three() {

return 'four';

}

function four() {

echo 'Done!';

}

$a = one()()()();

Done!

注意:上面的所有代码片段都需要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);

当然,这是PHP / 7语法.对于旧版本,您需要具有突破魔力的辅助变量:

$a = new A();

$b = $a(1);

$c = $b(2);

$d = $c(3);

$d(4);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值