

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 适用于 PHP 的 AWS SDK 版本 3 的代码中配置服务客户端
<a name="configuring-service-clients-code"></a>

除了（或作为替代方案）[通过外部方式配置服务客户端](configuring-service-clients-ext.md)之外，您还可以在代码中以编程方式对其进行配置。

通过在代码中配置服务客户端，您可以精细地控制许多可用的选项。可以通过外部方式设置的大多数配置也可以在代码中进行设置。

## 代码中的基本配置
<a name="conf-service-client-code-basic"></a>

您可以向客户端的构造函数传递选项的关联数组，从而在代码中创建和配置服务客户端。在以下示例中，关联数组仅包含客户端使用的“区域”选项：

```
require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\Exception\AwsException;

//Create an S3Client
$s3 = new S3Client([
    'region' => 'eu-south-2'
]);
```

有关可选“版本”参数的信息，请参阅[配置选项](guide_configuration.md#cfg-version)主题。

请注意，我们**并未**向客户端显式提供凭证。这是因为 SDK 使用[默认凭证提供程序链](guide_credentials_default_chain.md)来查找凭证信息。

在 [适用于 PHP 的 AWS SDK 版本 3 的客户端构造器选项](guide_configuration.md) 中详细介绍了所有通用的客户端配置选项。创建的客户端不同，提供的选项数组也不同。每个客户端的 [API 文档](https://docs.aws.amazon.com/aws-sdk-php/latest/)中介绍了这些自定义客户端配置选项。

## 使用 `Sdk` 类
<a name="sdk-class"></a>

`Aws\Sdk` 类可作为客户端工厂，用于管理多个客户端的共享配置选项。许多可提供给特定客户端构造函数的选项也可提供给 `Aws\Sdk` 类。这些选项会应用于每个客户端构造函数。

 **导入** 

```
require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\Exception\AwsException;
```

 **示例代码** 

```
// The same options that can be provided to a specific client constructor can also be supplied to the Aws\Sdk class.
// Use the us-west-2 region and latest version of each client.
$sharedConfig = [
    'region' => 'us-west-2'
];
// Create an SDK class used to share configuration across clients.
$sdk = new Aws\Sdk($sharedConfig);
// Create an Amazon S3 client using the shared configuration data.
$client = $sdk->createS3();
```

所有客户端均可共享的选项置于根级别的键值对中。服务特定的配置数据可以在关联数组中提供，其密钥与服务的命名空间相同（例如，“S3”、“DynamoDb” 等）。

```
$sdk = new Aws\Sdk([
    'region'   => 'us-west-2',
    'DynamoDb' => [
        'region' => 'eu-central-1'
    ]
]);

// Creating an Amazon DynamoDb client will use the "eu-central-1" AWS Region.
$client = $sdk->createDynamoDb();
```

特定于服务的配置值结合了特定于服务的值和根级值（即特定于服务的值浅合并到根级值）。

**注意**  
如果您在应用程序中使用多个客户端实例，强烈建议您使用 `Sdk` 类来创建客户端。`Sdk` 类会自动针对每个开发工具包客户端使用同一 HTTP 客户端，允许不同服务的开发工具包客户端执行非阻塞 HTTP 请求。如果开发工具包客户端未使用同一 HTTP 客户端，则开发工具包客户端发送的 HTTP 请求可能会阻塞服务之间的 Promise 协调。