Php 致命错误:未捕获错误:调用Y上的成员函数X

Php 致命错误:未捕获错误:调用Y上的成员函数X,php,Php,我正在努力学习OOP PHP,这对我来说是新的。我看过其他帖子,但还没有找到一篇能回答我问题的帖子 class Test { public function a(){ //getting data... return $array; } public function b($array){ return true; } } $test = new Test(); $x = $test->a()->b(); 当我尝试上述操作时,会出现以下错

我正在努力学习OOP PHP,这对我来说是新的。我看过其他帖子,但还没有找到一篇能回答我问题的帖子

class Test
{
  public function a(){
    //getting data...
    return $array;
  }
  public function b($array){
    return true;
  }
}


$test = new Test();
$x = $test->a()->b();
当我尝试上述操作时,会出现以下错误:

致命错误:未捕获错误:调用数组上的成员函数a()


有人能解释为什么这不起作用吗
a
返回
数组
b
接受
数组
,要执行您在此处尝试执行的操作,您需要使用此选项:

$x = $test->b($test->a());
表达式中的第二个箭头

$x = $test->a()->b();
尝试对
$test->a()
的返回值调用对象方法,如您所知,这是一个数组。它不会将
a()
的返回值作为参数传递给
b()

为了使用像
->a()->b()
这样的语法,
a()
必须返回方法为
b()
的对象。如果方法
b()
是来自同一对象的方法,则可以通过在
a()
中返回
$this
来实现,但如果它还需要返回数组,则该方法不起作用,因此无法像这样链接方法


如果
a()
不返回数组,而是存储在对象属性中,并且
b()
不接受数组,而是对属性中的数据进行操作,则可以使其工作

class Test
{
    protected $data;

    public function a() {
        //getting data...
        $this->data = $theDataYouGot;
        return $this;
    }

    public function b($array) {
        // do something with $this->data
        return true;
    }
}
就我个人而言,我尽量避免这类事情,因为我认为它增加了不必要的复杂性,使测试变得更加困难,但没有太多额外的好处,但我已经看到了这一点。

$x=$test->b($test->a())
是正确的语法。您正在尝试的是方法链接。