前提・実現したいこと
パーフェクトphpという本の7章の自作フレームワークで詰まっています。
$dir、または$dirs[]の変数の中身が分かりません。
$loader->registerDirのところでなぜ引数が2つ指定されているのかも分かりません。
今の所上記2つがわからないです……。
多分、この本のこの章以降もわからないことだらけだと思うのですが、
なにか参考になるものがあるでしょうか?
初歩的な部類に入るので、この程度でわからないなら、同じような質問してしまいそうで不安です。
発生している問題・エラーメッセージ
変数、配列の中身が知りたい、引数を2つ指定している箇所の理由。
該当のソースコード
php
1 2 3ClassLoader.php 4 5<?php 6 7 8class ClassLoader 9{ 10 protected $dirs; 11 12 13 public function register() 14 { 15 spl_autoload_register(array($this, 'loadClass')); //自身とロードクラスをオートロードにセットする。 16 } 17 18 public function registerDir($dir) 19 { 20 $this->dirs[] = $dir; //ディレクトリを配列で格納。 21 22 } 23 24 public function loadClass($class) //ファイル名を$classで受け取る。 25 { 26 foreach ($this->dirs as $dir) { //ディレクトリ分フォリーチさせる。 27 $file = $dir . '/' . $class . '.php'; //ファイル名とディレクトリを合体させてファイルに格納。 28 if (is_readable($file)) { //読み込み可能か判断。 29 require $file; //ファイルを読み込む。 30 31 return; 32 } 33 } 34 } 35} 36 37bootstrap.php 38<?php 39 40require 'core/ClassLoader.php'; 41 42$loader = new ClassLoader(); 43$loader->registerDir(dirname(__FILE__).'/core'); //<-ここがわからないdirname?FILE?なぜ2つ?。 44$loader->registerDir(dirname(__FILE__).'/models'); //<-ここもわからない。 45$loader->register(); //オートロードにセット。
試したこと
bar_dumpしたけど何故かうまくいかなかった。
なぜかエラーが出ます。
なぜでしょうか?
補足情報(FW/ツールのバージョンなど)
xamppのローカル環境です。
win7です。
「詰んだ」だけだと何も要件が含まれていませんので、もう少し質問内容に寄せた要件にしてください。
また、コードはマークダウンのcode機能を利用してご提示ください。
ちょっと気になる点ですが、パーフェクトPHPは私も持っていますが(もう長く読んでいませんが)「自作フレームワーク」の章に入る際に、本当にその章に必要な技術が身についているほどの内容ではない、、という印象です。
オブジェクト指向についてはきちんと理解された上で入られていますでしょうか?
コードと思しき部分くらい、自動でマークアップすべきだと思いまちゅ。
いつまでたってもteratailは成長ちまちぇんねぇ。
もう、かいはちゅにかけるお金は無いのでちゅか?
> $loader->registerDirのところでなぜ引数が2つ指定されているのか
dirname(FILE).'/core' も dirname(FILE).'/models' もこれで1つの引数です。
至らない点多々ありすみません。
回答有り難うございます。
オブジェクト指向はnewして再利用する連想配列みたいなふわっとしたイメージしか持ってないです。
メモリの話とか踏み込んだ話は難しいです……
質問は編集できますので適宜調整してください。
>再利用する連想配列みたいなふわっとしたイメージしか持ってないです。
なるほど。だとしたらだいぶ厳しいかもしれません。もちろん、「だからやめたほうがいい」というわけではなく、ふわっとしたところから「自分で扱える」レベルまでちょっとでもいいのであげてから入ったほうが理解しやすくなる、ということですね。
あ、あとこちらは「質問への追記修正依頼」のコメント欄であって回答ではないです。
質問文への不備や不足の調整をお願いしたり、質問者さんへの確認に利用されます。
回答3件
あなたの回答
tips
プレビュー