我正在开发一个解决方案,我需要使用Amazon WebServices
库。他们的库在所有项目中使用命名空间,我是PHP
开发的初学者,我需要你的帮助来更好地理解它是如何工作的。
这是我的班级:
<?php
// include('AmazonSNSvendorawsaws-sdk-phpsrcSdk.php');
// include('AmazonSNSmodelCustomCredentials.php');
use AwsSdk;
class AwsSns {
public $sns;
public $platformApplicationArn;
public function __construct(){
$sdk = new Sdk([
'version' => 'latest',
'debug' => false,
'retries' => 3,
'credentials' => [
'key' => CustomCredentials::SNS_KEY,
'secret' => CustomCredentials::SNS_SECRET
],
'Sns' => [
'region' => 'sa-east-1'
]
]);
$this->sns = $sdk->createSns();
$this->generatePlatformApplicationArn();
}
private function generatePlatformApplicationArn( ){
$result = $this->sns->createPlatformApplication( array(
// Name is required
'Name' => 'GCMPedro',
// Platform is required
'Platform' => 'GCM',
// Attributes is required
'Attributes' => array(
// Associative array of custom 'String' key names
'PlatformCredential' => "AIzaSyBYjNaE7ShuLc2y4mf53bVwszDt8XA-YTI" //__API_KEY__
),
));
$this->platformApplicationArn = $result->get('PlatformApplicationArn');
Util::generateFile('PlataformApplicationArn: '.$this->platformApplicationArn, 'a');
}
public function getEndpointArn( $token ){
$result = $this->sns->createPlatformEndpoint(array(
// PlatformApplicationArn is required
'PlatformApplicationArn' => $this->platformApplicationArn,
// Token is required
'Token' => $token,
//'CustomUserData' => 'string',
'Attributes' => array(
// Associative array of custom 'String' key names
'Enabled' => 'true'
),
));
Util::generateFile('EndpointArn: '.$result->get('EndpointArn'), 'a');
return( $result->get('EndpointArn') );
}
}
?>
1)关于名称空间,要使用它,我是否包含或不包含.php
文件?
观察:
当我不使用include时,php返回以下错误消息:
致命错误:在C:Program Files中找不到类"AwsSdk"(x86)VertrigoServwwwAmazonSNSextraAwsSns.php on line 14
请注意,非常感谢。
当您没有设置像PSR-0或PSR-4这样的自动加载(就像在常见的PHP框架中使用的那样)或其他东西时,必要的文件不会在调用时自动加载/包含。我猜你没有这样的自动加载设置,所以你可以包含include
关键字。
在PHP的官方文档中你可以读到所有关于命名空间的内容。
手册引文。2好处:
在PHP世界中,命名空间的设计是为了解决库和应用程序的作者在创建可重用的代码元素(如类或函数)时遇到的两个问题:
- 创建的代码与PHP内部类/函数/常量或第三方类/函数/常量之间的名称冲突
能够别名(或缩短)Extra_Long_Names旨在缓解第一个问题,提高源代码的可读性。