如何在php中使用命名空间?

时间:2015-10-07 17:56:59

标签: php composer-php

我正在开发一个需要使用Amazon WebServices库的解决方案。他们的库在所有项目中使用命名空间以及我如何在PHP开发中成为初学者我需要你的帮助才能更好地理解它是如何工作的。

这是我的班级:

<?php

// include('AmazonSNS\vendor\aws\aws-sdk-php\src\Sdk.php');
// include('AmazonSNS\model\CustomCredentials.php');

use Aws\Sdk;

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中找不到类'Aws \ Sdk'   第14行的(x86)\ VertrigoServ \ www \ AmazonSNS \ extra \ AwsSns.php

你的注意力我非常感谢你。

1 个答案:

答案 0 :(得分:1)

如果您尚未设置PSR-0PSR-4等自动加载功能(如使用常见的PHP框架)或其他内容,则必需文件在被调用时自动加载/包含。我猜您没有设置这样的自动加载功能,因此您可以添加include关键字。

official documentation of PHP中,您可以阅读有关命名空间的所有内容。

本手册的Citate。 2个好处:

  

在PHP世界中,命名空间旨在解决库和应用程序的作者在创建可重用的代码元素(如类或函数)时遇到的两个问题:

     
      
  1. 您创建的代码与内部PHP类/函数/常量或第三方类/函数/常量之间的名称冲突。
  2.   
  3. 能够别名(或缩短)Extra_Long_Names,旨在缓解第一个问题,提高源代码的可读性。
  4.