Разрешение классов в разных файлах из одного файла ввода php с автоматическим завершением (разработка пакета) - PullRequest
0 голосов
/ 07 ноября 2018

Я делаю пакет php и хочу, чтобы конечные пользователи использовали API вроде:

$package = new Package($key)
$orders = $package->orders()->all();
$products = $package->products()->all();

Моя структура выглядит следующим образом:

src
├── Api
│   ├── ApiClient.php
│   ├── Orders.php
│   └── Products.php
└── Package.php

Package.php берет мой ключ в конструкторе и затем вызывает API для получения токена. Это сохраняется в защищенной переменной внутри объекта, и объект возвращается обратно со всей необходимой информацией, поэтому мне не нужно снова проходить аутентификацию в скрипте.

У меня вопрос: как я могу эффективно получить доступ к методам внутри Orders.php, Products.php из входного файла с моим желаемым API?

Что-то вроде следующего приводит меня туда, но это грязно, когда вы начинаете добавлять во многие классы. Я также чувствую, что повторяю много кода, особенно когда имеется несколько переменных и зависимостей конструктора.

public function orders() : Orders
{
    return new Orders($this->token);
}

Я довольно часто вижу использование класса отражения и / или __call магических методов, однако они не обеспечивают никакого автозавершения в среде IDE, которое мне действительно не нравится.

protected function getApiInstance($method)
{
    $class = "\\My\\Namespace\\Api\\".ucwords($method);
    if (class_exists($class) && ! (new ReflectionClass($class))->isAbstract()) {
        return new $class($this->key);
    }
}

Какие-нибудь советы о том, как этого добиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...