В абстрактном классе обязательно должен быть объявлен хотя бы один абстрактный метод и возможно какие то общие методы для всех потомков (любой области видимости public, protected, private). У интерфейса могут быть объявлены только публичные методы.
Соответственно судя из вашей логики абстрактного класса, вам нужно все методы сделать
abstract public function без тела и сам класс объявить как abstract class
AbstractTasksManager
Соответственно ваш код примет примерно такой вид:
<?php
interface TasksManagerInterface
{
public function find(TaskInterface $task);
public function create(TaskInterface $task);
public function update(TaskInterface $task);
public function delete(TaskInterface $task);
}
interface TaskInterface
{
public function find(TaskInterface $task);
public function create(TaskInterface $task);
public function update(TaskInterface $task);
public function delete(TaskInterface $task);
}
abstract class AbstractTask implements TaskInterface
{
protected function _commonTask() {
// какой то общий метод для всех потомков AbstractTask
}
abstract public function find(TaskInterface $task);
abstract public function create(TaskInterface $task);
abstract public function update(TaskInterface $task);
abstract public function delete(TaskInterface $task);
}
abstract class AbstractTasksManager implements TasksManagerInterface
{
protected function _commonTasksManager() {
// какой то общий код для всех потомков AbstractTasksManager
}
abstract public function find(TaskInterface $task);
abstract public function create(TaskInterface $task);
abstract public function update(TaskInterface $task);
abstract public function delete(TaskInterface $task);
}
class Task extends AbstractTask implements TaskInterface
{
public function find(TaskInterface $task)
{
/** Внедрить метод find в TasksManager правильно?
* Или он должен быть в отдельном классе?
* Метод find использует скоупы Yii2
*/
// можно вызывать
$this->_commonTask();
}
public function create(TaskInterface $task)
{
/** Содержимое метода */
}
public function update(TaskInterface $task)
{
/** Содержимое метода */
}
public function delete(TaskInterface $task)
{
/** Содержимое метода */
}
}
class TasksManager extends AbstractTasksManager implements TasksManagerInterface
{
public function find(TaskInterface $task)
{
/** Внедрить метод find в TasksManager правильно?
* Или он должен быть в отдельном классе?
* Метод find использует скоупы Yii2
*/
// можно вызывать
$this->_commonTasksManager();
}
public function create(TaskInterface $task)
{
/** Содержимое метода */
}
public function update(TaskInterface $task)
{
/** Содержимое метода */
}
public function delete(TaskInterface $task)
{
/** Содержимое метода */
}
}
$task = new Task();
$taskManager = new TasksManager();