Можно ли вернуть дочерний метод из метода родительского класса?

Поскольку я новичок в Laravel, в настоящее время я использую очередь и имею следующую проблему с заданием. Поскольку API, который я вызываю, может дросселировать, мне нужна эта логика для каждого вызываемого метода, поэтому я создал родительский (базовый) класс. (не уверен, что это правильный путь, пожалуйста, поправьте меня, если я ошибаюсь и здесь)

Итак, у меня есть JobClass, который расширяет BaseJobClass, который должен обрабатывать создание клиента API.

Базовая работа

class BaseJob implements ShouldQueue
{
    protected function performActionOrThrottle($method, $parameters, Customer $customer, Marketplace $marketplace) {
        $client = $this->createClient($customer, $marketplace);
        if (!method_exists($client, $method)) {
            return $this->fail(new \Exception("Method {$method} does not exist in " . get_class($client)));
        }
        try {
            $result = $client->{$method}($parameters);
        } catch (\Exception $exception)
        {
            echo $exception->getMessage().PHP_EOL;
            return $this->release(static::THROTTLE_LIMIT);
        }
        return $result;
    }
}

Работа

class Job extends BaseJob
{

    CONST THROTTLE_LIMIT = 60;
    CONST RETRY_DELAY = 10;

    private $customer;
    private $requestId;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(Customer $customer, $requestId = null)
    {
        $this->customer = $customer;
        $this->requestId = $requestId;
        echo "Updating Inventory for {$customer->name}\n";
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $marketplace = Marketplace::findOrFail(5);

        if (!$report = $this->performActionOrThrottle('GetReport', $this->requestId, $this->customer, $marketplace)) {
            echo "Report not available, trying again in " . self::RETRY_DELAY;
            return $this->release(self::RETRY_DELAY);
        }

        ... 
        handle Data
        ...

        return;
    }
}

Чтобы завершить работу, мне нужно вернуть метод handle(). Как я могу вернуть метод дескриптора из родительского метода, не проверяя возвращаемое значение и не реализовывая его? Если бы я хотел этого, нет смысла иметь этот родитель, который должен содержать всю логику, которая мне нужна для нескольких заданий.


person mrvnklm    schedule 27.03.2019    source источник
comment
проверьте ниже URL-адрес stackoverflow.com/questions/31883685/   -  person Niraj Savaliya    schedule 27.03.2019
comment
родитель не может вызвать функцию дочернего элемента, которого нет в родительском. Вы можете объявить пустую функцию в родительском классе, которая будет переопределена дочерними классами.   -  person Danyal Sandeelo    schedule 27.03.2019
comment
@NirajSavaliya извините, но это не имеет никакого отношения к моей проблеме. Я хочу вернуться, чтобы остановить выполнение, а не возвращать значение. @DanyalSandeelo, в чем смысл? Я не хочу реализовывать логику createClient и дросселя в каждой работе.   -  person mrvnklm    schedule 27.03.2019