首先放上代码:
<?php
class MagicTest{
//__tostring会在把对象转换为string的时候自动调用
public function __tostring() {
return "This is the class MagicTest";
}
//__invoke会在把对象当作一个方法调用的时候自动调用
public function __invoke($x) {
echo "__invoke called with parameter".$x."<br/>";
}
} $obj = new MagicTest();
echo $obj."<br/>";
$obj(5);
输出为:
This is the class MagicTest
__invoke called with parameter5
可以看到调用$obj的时候,自动调用 __tostring() 里面的字符,这时,如果你把tostring前面的双下划线减成一条,则会出现错误
同样在调用 $obj(5) 的时候,会自动调用 __invoke 方法