为什么类可以用->一次性调用多个方法

比如tp框架M('table')->where()->limit()->find();

下面这么写为什么会报错

<?php
/**
* 
*/
class bb
{
    

    public function fc1(){
        

    }

    public function fc2(){
        
        
    }
    public function fc3(){
        
    }
}

$bb = new bb();
$bb->fc1()->fc2()->fc3();
阅读 4.1k
6 个回答

方法里返回当前对象。

<?php
class bb
{
    public function fc1(){
    
        return $this;
    }

    public function fc2(){
    
        return $this;
    }
    
    public function fc3(){
    
        return $this;
    }
}

$bb = new bb();
$bb->fc1()->fc2()->fc3();

这个叫做 链式调用 每个方法直接返回this是最常见的方式。

一种编程风格叫链式编程,原理就是调用的属性或者方法的返回值是调用者本身。具体可以google下。

调用的过程其实是这样的
( ( $bb->fc1() )->fc2() )->fc3();

先执行 $bb->fc1(),如果 $bb->fc1() 的返回值是对象,就可以正常地使用 -> 来调用其中的方法。如果返回值不是对象,当然就会出错。

参考 https://segmentfault.com/a/11...

这个链式调用风格。通常在函数中实现某个方法后,返回当前对象.

public function fn1(){
    //dosomething
    return $this;
}

由于函数返回的是当前的对象,因此有可以调用其他方法。

有箭头 说明它是个对象 方法里要返回对象才能使用箭头

推荐问题
宣传栏