使用命名空间时无法使用 require_once 加载 class

Cannot load class with require_once when using namespace

我正在使用 Slim 开发一个简单的 REST API,但我遇到了一个奇怪的问题。本质上,我将 API 配置为通过 composer 使用自动加载器加载所有 classes:

"autoload": {
    "psr-4": {
        "App\Controllers\": "app/controllers",
        "App\Helpers\": "app/helpers",
        "App\Models\": "app/models",
        "App\Services\": "app/services",
        "Core\": "src/core",
        "Core\Helpers\": "src/helpers",
        "Core\Libraries\": "src/libraries"
    }
}

我创建了一个名为 GoogleSync 的 class,它必须包含 Google API php library,因此我以下列方式包含:

<?php namespace Core\Libraries;

defined('BASEPATH') or exit('No direct script access allowed');

require_once __DIR__ . '/external/google-api-php-client/Google_Client.php';
require_once __DIR__ . '/external/google-api-php-client/contrib/Google_CalendarService.php';


class GoogleSync
{
    /**
     * Google API Client
     *
     * @var Google_Client
     */
    protected $client;

    public function __construct($api_settings)
    {
        var_dump(file_exists(__DIR__ . "/external/google-api-php-client/Google_Client.php"));
        $this->client = new Google_Client();
    }
}

我收到以下错误:

Fatal error: Uncaught Error: Class 'Core\Libraries\Google_Client' not found in A:\Programmi\MAMP\htdocs\ci3-api\src\libraries\GoogleSync.php:44

出于一个奇怪的原因,如果我在 class Google_Client 中包含以下命名空间:

Core\Libraries

代码能够加载 class。所以我怀疑 require_once 无法注入 class 因为有一个自动加载器逻辑,但我可能是错的。

另外,构造函数中的方法file_exist return true.

发生了什么事?

您在命名空间内调用它,因此它会尝试使用该命名空间,也许可以尝试像这样实例化它:$this->client = new \Google_Client(); 忽略命名空间。

Possible duplicate of this question.