https://qiita.com/ritukiii/items/de30b2d944109521298f#%E3%81%9D%E3%81%93%E3%81%A7%E3%82%88%E3%81%86%E3%82%84%E3%81%8Fdi%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A
このサイトのcontainer.php
に質問があります。
$container['file.logger'] = $container->protect(function($logFileName) { return new FileLogger($logFileName); }); $container['twitter.manager'] = function ($c) { $logger = $c['file.logger']('twitter_manager.log'); return new TwitterManager($logger); }; $container['database.authenticator'] = function ($c) { return new DatabaseUserAuthenticator(); }; $container['sample'] = function ($c) { return new Sample($c['file.loggger']('sample.log'), $c['twitter.manager'], $c['database.authenticator']); };
こんな風にプログラムを書いてますが、その下で
$sample = $container['sample'];
としています。
これだと
$container['sample'] = function ($c) { return new Sample($c['file.loggger']('sample.log'), $c['twitter.manager'], $c['database.authenticator']); };
の$c
に何も入らないんじゃないかと思うんですが、なぜこんな風になっているんでしょうか?
ためしに
<?php $container['sample'] = function ($c) { var_dump("test" . $c); return "Hello" . $c; }; $test = $container['sample']; var_dump($test); ?>
と書いて実行しましたが、
object(Closure)[1] public 'parameter' => array (size=1) '$c' => string '<required>' (length=10)
となりました。
クロージャが返されたのはわかるんですが、**なんで$cに<required>という文字が入ってるんでしょうか?**普通nullとかになると思ったんですが....
あと、**sampleの関数の中のvar_dumpが実行されていないようで、何も出力されませんでした。**これもなぜなのかわからないです。
そして、引数をあげるとどっちもちゃんと動いていました
<?php $container['sample'] = function ($c) { var_dump("test" . $c); return "Hello" . $c; }; $test = $container['sample']("Hello"); var_dump($test); ?>
string 'testHello' (length=9) string 'HelloHello' (length=10)
質問のところを太字にしました
初心者ですが、よろしくお願いします
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。