teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

訂正

2019/06/18 12:58

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -11,4 +11,4 @@
11
11
 
12
12
  1. サービスプロバイダの `register()` で `bind()` `singleton()` などで,特定のクラス名に対応するインスタンス生成用の関数がコンテナに登録されている場合,その関数を実行して得られた返り値のインスタンスを取得する。登録されていない場合は「2.」に続く。
13
13
  2. [`ReflectionClass`](https://www.php.net/manual/ja/class.reflectionclass.php) を使ってクラスのコンストラクタを解析して引数の型を読み取り,それらのクラスを同じようにコンテナを使って生成する。この際,同じように「1.」「2.」の処理を可能な部分まで再帰する。不可能になったら「3.」に続く。
14
- 3. コンストラクタ引数が存在しないクラスの場合はそのまま `new` 演算子で生成し,「2.」で処理できない型指定の無い引数などが存在するクラスの場合は失敗と見なして例外を投げる。
14
+ 3. 必須のコンストラクタ引数が存在しないクラスの場合はそのまま `new` 演算子で生成し,「2.」で処理できない型指定の無い必須の引数などが存在するクラスの場合は失敗と見なして例外を投げる。

3

訂正

2019/06/18 12:58

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -11,4 +11,4 @@
11
11
 
12
12
  1. サービスプロバイダの `register()` で `bind()` `singleton()` などで,特定のクラス名に対応するインスタンス生成用の関数がコンテナに登録されている場合,その関数を実行して得られた返り値のインスタンスを取得する。登録されていない場合は「2.」に続く。
13
13
  2. [`ReflectionClass`](https://www.php.net/manual/ja/class.reflectionclass.php) を使ってクラスのコンストラクタを解析して引数の型を読み取り,それらのクラスを同じようにコンテナを使って生成する。この際,同じように「1.」「2.」の処理を可能な部分まで再帰する。不可能になったら「3.」に続く。
14
- 3. [`ReflectionClass`](https://www.php.net/manual/ja/class.reflectionclass.php) を使ってクラスのコンストラクタを解析し,コンストラクタ引数が存在しないクラスの場合はそのまま生成し,「2.」で処理できない型指定の無い引数などが存在するクラスの場合は失敗と見なして例外を投げる。
14
+ 3. コンストラクタ引数が存在しないクラスの場合はそのまま `new` 演算子で生成し,「2.」で処理できない型指定の無い引数などが存在するクラスの場合は失敗と見なして例外を投げる。

2

訂正

2019/06/18 12:58

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -10,5 +10,5 @@
10
10
  以下の優先順位でインスタンス化が行われます。
11
11
 
12
12
  1. サービスプロバイダの `register()` で `bind()` `singleton()` などで,特定のクラス名に対応するインスタンス生成用の関数がコンテナに登録されている場合,その関数を実行して得られた返り値のインスタンスを取得する。登録されていない場合は「2.」に続く。
13
- 2. [`ReflectionClass`](https://www.php.net/manual/ja/class.reflectionclass.php) を使ってクラスのコンストラクタを解析し,コンストラクタ引数に指定さクラスを同じようにコンテナを使って生成する。この際,同じように「1.」「2.」の処理を可能な部分まで再帰する。不可能になったら「3.」に続く。
13
+ 2. [`ReflectionClass`](https://www.php.net/manual/ja/class.reflectionclass.php) を使ってクラスのコンストラクタを解析し引数の型を読み取り,そらのクラスを同じようにコンテナを使って生成する。この際,同じように「1.」「2.」の処理を可能な部分まで再帰する。不可能になったら「3.」に続く。
14
- 3. [`ReflectionClass`](https://www.php.net/manual/ja/class.reflectionclass.php) を使ってクラスのコンストラクタを解析し,コンストラクタ引数が存在しないクラスの場合はそのまま生成し,存在するクラスの場合は失敗と見なして例外を投げる。
14
+ 3. [`ReflectionClass`](https://www.php.net/manual/ja/class.reflectionclass.php) を使ってクラスのコンストラクタを解析し,コンストラクタ引数が存在しないクラスの場合はそのまま生成し,「2.」で処理できない型指定の無い引数などが存在するクラスの場合は失敗と見なして例外を投げる。

1

修正

2019/06/18 12:57

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  > Q. なぜresolveを使用するとconstructでの引数を指定しなくてもinstance化できるのか?
7
7
 
8
- A. resolve関数の中で,指定されたクラスを を使って解析し,引数の型指定を読み取り,型に対応するクラスを自動生成しているから。
8
+ A. resolve関数の中で,指定されたクラスを [`ReflectionClass`](https://www.php.net/manual/ja/class.reflectionclass.php) を使って解析し,引数の型指定を読み取り,型に対応するクラスを自動生成しているから。
9
9
 
10
10
  以下の優先順位でインスタンス化が行われます。
11
11