Пространства имен и статические методы в PHP
Я использую PHP 5.5 и пытаюсь использовать AWS-SDK для PHP.
Вот как выглядит мой код:
require_once 'AWS/aws.phar';
use Aws\DynamoDb\DynamoDbClient;
DynamoDBAccessLayer::init();
class DynamoDBAccessLayer {
public static $client;
public static $AWSCredentials = array(
'region' => 'us-east-1',
'key' => 'KEY',
'secret' => 'SECRET'
);
public static function init() {
self::$client = DynamoDbClient::factory(self::$AWSCredentials);
}
}
Все, что я пытаюсь сделать на этом этапе, - это инициировать клиента, но есть проблемы, связанные с пространством имен, при выполнении init() возникает следующая ошибка:
PHP Fatal error: Class 'Aws\DynamoDb\DynamoDbClient' not found in....
Причина, по которой я знаю, что это проблема пространства имен, заключается в том, что следующий код правильно назначает клиента без ошибок:
require_once 'AWS/aws.phar';
use Aws\DynamoDb\DynamoDbClient;
DynamoDBAccessLayer::$client = Aws\DynamoDb\DynamoDbClient::factory(DynamoDbAccessLayer::$AWSCredentials);
class DynamoDBAccessLayer {
public static $client;
public static $AWSCredentials = array(
'region' => 'us-east-1',
'key' => 'KEY',
'secret' => 'SECRET'
);
}
Таким образом, PHP может получить доступ к классу DynamoDbClient вне этих статических методов, но не может получить к нему доступ внутри них.
Как сделать Aws \ DynamoDb \ DynamoDbClient доступным внутри статического метода init()?
1 ответ
Решение
Я смог решить эту проблему с помощью следующего кода:
require './aws-autoloader.php';
use \Aws\DynamoDb\DynamoDbClient;
$client = \Aws\DynamoDb\DynamoDbClient::factory(array(
'profile' => 'default',
'region' => 'us-east-1',
'base_url' => 'http://localhost:8000'
));
echo "<pre>";
var_dump($client);
echo "</pre>";
Дайте мне знать, если у вас есть какие-либо вопросы / проблемы.