1

我正在使用 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() 静态方法中可访问?

4

1 回答 1

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>";

如果您有任何疑问/问题,请告诉我。

于 2014-09-24T16:12:07.547 回答