Php 致命错误:未捕获错误:调用Y上的成员函数X
我正在努力学习OOP PHP,这对我来说是新的。我看过其他帖子,但还没有找到一篇能回答我问题的帖子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(); 当我尝试上述操作时,会出现以下错
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())
是正确的语法。您正在尝试的是方法链接。