使用命名空间时无法使用 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.
我正在使用 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.