Пространства имен и статические методы в 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>";

Дайте мне знать, если у вас есть какие-либо вопросы / проблемы.

Другие вопросы по тегам