PHP中的命名空间和静态方法

时间:2013-08-24 20:39:40

标签: php autoloader

我正在使用PHP 5.5,而我正在尝试使用适用于PHP的AWS-SDK。

以下是我的代码的样子:

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类,但无法在其中访问它。

如何在init()静态方法中访问Aws \ DynamoDb \ DynamoDbClient?

1 个答案:

答案 0 :(得分: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>";

如果您有任何疑问/问题,请与我们联系。