Php расширение метода при переопределении - PullRequest
0 голосов
/ 27 октября 2018

Можно ли расширить родительский класс метод , переопределяя его? Например:

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 функции)

1 Ответ

0 голосов
/ 27 октября 2018

Если вы использовали 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);
    }

}

Это означает, что единственный раз, когда вы создаете представление в базовом классе, все, что вы делаете, это добавляете дополнительную информацию в производный класс.

...