質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1182閲覧

AWS sdk for phpのクラス(S3Client)を継承することは可能でしょうか?

ruuusaamarki

総合スコア468

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2018/02/16 08:33

編集2018/02/17 01:05

前提・実現したいこと

aws sdk for phpのクラスを
継承して使いたいのですがうまくいかず質問させていただいています。

発生している問題・エラーメッセージ

Fatal error: Uncaught TypeError: Argument 1 passed to Aws\S3\S3Client::__construct() must be of the type array, none given, called in

情報取得が成功するソースコード

以下のようにグローバルでの取得は成功しています。

php

1require '/var/www/html/vendor/autoload.php'; 2 3/** 4 * Summary. AWS sdk クラス読み込み 5 */ 6 7use Aws\S3\S3Client; 8use Aws\S3\Exception\S3Exception; 9 10$s3 = S3Client::factory( [ 11 'region' => 'ap-northeast-1', 12 'version' => 'latest', 13 'signature_version' => 'v4' 14] ); 15print_r($s3);

情報取得が失敗するソースコード

php

1require '/var/www/html/vendor/autoload.php'; 2 3/** 4 * Summary. AWS sdk クラス読み込み 5 */ 6 7use Aws\S3\S3Client; 8use Aws\S3\Exception\S3Exception; 9 10 11class AWSTestExtends extends S3Client { 12 13 private $s3; 14 15 /** 16 * @return mixed 17 */ 18 public function making_s3_instans () { 19 $afters3 = $this->s3_client_factory(); 20 return $afters3; 21 } 22 23 private function s3_client_factory () { 24 /** 25 * Summary. Instantiate the client. 26 */ 27 $this->s3 = parent::factory( [ 28 'region' => 'ap-northeast-1', 29 'version' => 'latest', 30 'signature_version' => 'v4' 31 ] ); 32 return $this->s3; 33 } 34 35} 36 37$awstestextendsvar = new AWSTestExtends; 38$atev = $awstestextendsvar->making_s3_instans(); 39print_r($atev);

試したこと

失敗するコードを以下のように変更してみたのですが
うまくいっておりません。

private function s3_client_factory ↓ public function s3_client_factory
parent::factory ↓ S3Client::factory
class AWSTestExtends extends S3Client ↓ class AWSTestExtends extends Aws\S3\S3Client

またfactoryメソッドはsdk2でDeprecatedなので
sdk3.xのような形でインスタンスから取得するというのも試してみました。

$this->s3 = parent::factory( [ 'region' => 'ap-northeast-1', 'version' => 'latest', 'signature_version' => 'v4' ] ); ↓ $this->s3 = new Aws\S3\S3Client([ 'region' => 'ap-northeast-1', 'version' => 'latest', 'signature_version' => 'v4' ] );

s3clientのページにコンストラクタの項目もあるので見てみたのですが解決方法を見つけられていない状態です。
おそらくオブジェクト指向の理解が浅いので継承のお作法が理解できていないのだと思いますが
自己解決に至らずこちらに書かせていただいています。
間違いなどご指摘いただけましたら幸いです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

private の関数はオーバーライドできません。

追記
すいません、自分も認識が間違っていました。
S3Client::factoryはstaticなので、インスタンスが生成されている為、
parent::factoryでstaticとしてアクセスしていません。

static PHP マニュアル

投稿2018/02/16 08:49

編集2018/02/20 01:17
himakuma

総合スコア952

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruuusaamarki

2018/02/17 00:58

himakumaさんコメントありがとうございます。 申し訳ありません。理解力がなく重ねての質問となってしまいますが privateな関数をオーバーライドしている意識がなかったのですが 以下の関数の部分がオーバーライドしているということでしょうか。 private function s3_client_factory それとも parent::factory の部分でしょうか? aws sdk for phpのマニュアルも一通り再確認してみたのですが 該当しそうな箇所が見つけられませんでした。
himakuma

2018/02/20 01:14

すいません、自分も認識が間違っていました。 S3Client::factoryはstaticなので、インスタンスが生成されている為、 parent::factoryでstaticとしてアクセスしていません。
ruuusaamarki

2018/03/09 03:04

コメント気が付かず大変失礼いたしました。 いただいた情報をもとに自分でも少し状況を整理してみます。 お付き合い下さりありがとうございましたm(_)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問