2013-08-24 90 views
1

我正在使用PHP 5.5,並試圖使用適用於PHP的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()靜態方法內可訪問?

+0

你可以嘗試在你的類中使用'\ Aws \ DynamoDb \ DynamoDbClient :: factory()'(注意反斜槓)。 –

+0

我嘗試過,同樣的錯誤 – Yasser1984

+0

我有同樣的問題,你有沒有得到解決?我這樣做:需要'./aws-autoloader.php';使用聲明之前,它的工作。 @ Yasser1984 –

回答

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

讓我知道如果您有任何疑問/問題。