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

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

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

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

Q&A

1回答

1472閲覧

DIを使ったソースがわからない

imamoto_browser

総合スコア1161

PHP

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

0グッド

0クリップ

投稿2015/06/09 09:07

PHPでDIを学習中なのですが、

lang

1// クラス名をinjectする 2class C_b { 3 private $configClass; 4 5 function __construct($class='Config') { 6 if (!is_string($class)) throw new InvalidArgumentException; 7 if (!is_a($class, 'Config', true)) throw new InvalidArgumentException; 8 $this->configClass = $class; 9 } 10 11 function getConfig($filename) { 12 $content = file_get_contents($filename); 13 return new $this->configClass($content); 14 } 15} 16 17//インスタンス化サンプル 18$c = new C_b('MockConfig'); 19$config = $c->getConfig('foo.ini');

上記コードをブラウザで実行すると、

Fatal error: Uncaught exception 'InvalidArgumentException' in /var/www/html/board/Class/sampleDi.php:9 Stack trace: #0 /var/www/html/board/Class/sampleDi.php(20): C_b->__construct('MockConfig') #1 {main} thrown in /var/www/html/board/Class/sampleDi.php on line 9

と表示されるのですが、このエラーメッセージが何を意味するのかがわかりません。このエラーの解説をおねがいします。

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

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

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

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

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

guest

回答1

0

情報が少なくてどうにも判断が難しいですね^^;
パッと見た感じ、実行することよりも、イメージを伝える為のサンプルソースではありませんか?

発生しているエラーメッセージは、例外をスローしているのにキャッチされていないというもので、
コードを拝見するに、コンストラクタの中の2行目で例外を投げる動きになるのではないでしょうか。

コンストラクタにクラス名?の文字列を渡すのはいいのですが
その文字列のインスタンスを生成して、それをis_a()メソッドに渡してあげる必要があるのでは?
今の状態では常にコンストラクタで例外が発生するかと思われます。

そもそも、おそらくクラスの生成についてのDIですので、
サンプルとして記述されているConfigクラスとMockConfigクラスはご準備されました?
これも親子関係にしておかないとis_a()でやはり例外を投げるでしょう。

このまま実行されたのでしたら問題は山積みです。foo.iniなども存在しないでしょうし。
曖昧な点が多すぎるので、単にアプリケーションの設定を外部で行いつつ、
ローカル環境・テスト環境・本番環境と環境を変える際に、
DIで読み込む設定を自在に変えたいケースのサンプルイメージコードではないでしょうか。

投稿2015/06/09 09:57

編集2015/06/09 10:17
kawamori

総合スコア61

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問