Вам необходимо создать экземпляр ApiClass из правильного пространства имен, и полное имя (FQN) для вашего ApiClass
равно app\ApiClass\ApiClass
. Вам нужно либо вызвать
$api = app\ApiClass\ApiClass();
, либо использовать только имя класса, импортировав пространство имен в заголовок файла:
use app\ApiClass\ApiClass;
include_once 'app/ProductListClass.php';
include_once 'app/ApiClass.php';
$api = new ApiClass();
...
Пространства имен объявляются для каждого файла, чтобы вы не могли изменитьих путем включения файлов в разных контекстах. Отсутствие пространства имен, определенного в файле, означает, что это глобальное пространство имен (например, ваше ProductListClass
).
GuzzleHttp \ Client
Если вы передаете экземпляр Client
в свой ApiClass, вам необходимо иметьон уже создан, и нет необходимости снова использовать new
. Если вы берете строку FQN в качестве параметра, вы можете сделать это, но это не очень хорошая практика (если вы не делаете подобного рода магию в какой-либо библиотеке внедрения зависимостей).
Так что либо сделайте это (предпочтительно):
class ApiClass
{
...
public function __construct(Client $client)
{
$this->url = 'http://external-api';
$this->client = $client;
}
с экземплярами API:
$api = new ApiClient(new GuzzleHttp\Client());
Или создать экземпляр внутри конструктора без параметров:
public function __construct()
{
$this->url = 'http://external-api';
$this->client = new GuzzleHttp\Client();
}
Ps. Я думаю, вы должны научиться использовать Composer и его автозагрузку (автоматическое включение файлов классов) - работа с библиотеками (и вашими собственными классами) будет намного проще.