是否可以在覆盖父类的同时扩展方法?例如:
class Foo {
public function edit() {
$item = [1,2];
return compact($item);
}
}
class Bar extends Foo {
public function edit() {
// !!! Here, is there any way I could import $item from parent class Foo?
$item2 = [3,4]; //Here, I added (extended the method with) some more variables
return compact($item, $item2); // Here I override the return of the parent method.
}
}
问题是我无法以任何方式编辑Foo
类,因为它是供应商软件包。
我不想编辑需要扩展它们的供应商方法(向其return
函数添加更多内容)
答案 0 :(得分:2)
如果您改用array_merge()
,则可能会更好地显示结果...
class Foo {
public function edit() {
$item = [1,2];
return $item;
}
}
class Bar extends Foo {
public function edit() {
$item = parent::edit(); // Call parent method and store returned value
$item2 = [3,4]; //Here, I added (extended the method with) some more variables
return array_merge($item, $item2); // Here I override the return of the parent method.
}
}
$a = new Bar();
print_r($a->edit());
这将输出-
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
因此,对parent::edit()
的调用将返回父类的数组,并将其从第二个类函数添加到数组中。
更新:
我无法对此进行测试,但希望这能给您带来什么...
class Foo {
protected function getData() {
return [1,2];
}
public function edit() {
return return view('view-file', compact($this->getData()));
}
}
class Bar extends Foo {
protected function getData() {
$item = parent::edit();
$item2 = [3,4];
return array_merge($item, $item2);
}
}
这意味着创建视图的唯一时间是在基类中,您要做的就是在派生类中添加额外的信息。