在PHP中使用类方法中的命名空间

时间:2018-01-26 18:25:48

标签: php amazon-web-services oop namespaces traits

我更愿意创建一个可以处理AWS PHP SDK调用的类,而不必根据需要将其设置为内联。给出这个例子:

require('aws.phar');

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

$region = 'us-east-1';

try {
 $s3 = S3Client::factory(array(
  'credentials' => array(
   'key' => AWS_ACCESS_KEY_ID,
   'secret' => AWS_SECRET_ACCESS_KEY),
  'region' => $region,
  'version' => 'latest'
 ));

 print_r($s3->listBuckets());

}
catch (S3Exception $e) {echo $e->getMessage();}
catch (AwsException $e) {echo $e->getAwsErrorType().' '.$e->getAwsErrorCode();}
catch (Exception $e) {echo $e->getMessage();}

最终,我想要一个像这样的类文件(最接近猜测):

require_once('aws.phar');

class S3 {

 private $region = 'us-east-1';
 private $s3;

 public function create() {
  try {
   $this->s3 = Aws\S3\S3Client::factory(array(
    'credentials' => array(
     'key' => AWS_ACCESS_KEY_ID,
     'secret'   => AWS_SECRET_ACCESS_KEY),
    'region' => $this->region,
    'version' => 'latest'
   ));
  }
  catch (Aws\Exception\AwsException $e) {echo $e->getMessage();}
  catch (Aws\S3\Exception\S3Exception $e) {echo $e->getAwsErrorType().' '.$e->getAwsErrorCode();}
  catch (Exception $e) {echo $e->getMessage();}
 }

 public function list() {
  if (!$this->s3) return false;

  return $this->s3->listBuckets();
 }

}

$s3 = new S3();
$s3->create();
$s3->list();

我已经找到了解决方案,但我没有到达任何地方。我认为最接近的是使用Traits,但是之后我还没有使用它们,所以我没有运气。

---编辑添加:

我没有注意到错误发生的情况,但在创建此示例后,我的一些初始错误消失了。我不确定范围是如何在类的外部使用require_once并尝试各种各样的东西,因为我认为类不能看到AWS名称空间。事实并非如此,因为我能够运行我的测试脚本,但它会返回:

Unable to open phar://<path_omitted>/aws.phar/Aws/S3/Resources/s3-latest.php for reading

最多执行$this->s3 = Aws\S3\S3Client::factory并捕获标准Exception并显示错误消息。

1 个答案:

答案 0 :(得分:0)

好吧,事实证明当我将它上传到服务器时这很有效,但是当在IDE(Zend Studio / Eclipse)中进行测试时,它试图通过完整的文件路径进行访问,并且该文件路径触发了权限错误

我怀疑Zend / Eclipse的权限和phar包存在一些问题。但是,我不确定是否可以在IDE中使用它。