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

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

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

Frameworkは、アプリケーションソフトを開発する際に、一般的な機能をより簡単に、より早く完了させる事を目的とした、ソフトウェアやライブラリのセットを指します。開発にフレームワークを使用する事で、追加で必要となる機能だけを開発するだけで済む為、開発効率の向上が見込めます。

PHP

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

Q&A

解決済

3回答

2903閲覧

パーフェクトphpの7章の例題の変数の中身が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Framework

Frameworkは、アプリケーションソフトを開発する際に、一般的な機能をより簡単に、より早く完了させる事を目的とした、ソフトウェアやライブラリのセットを指します。開発にフレームワークを使用する事で、追加で必要となる機能だけを開発するだけで済む為、開発効率の向上が見込めます。

PHP

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

0グッド

4クリップ

投稿2019/04/21 08:37

編集2019/04/22 08:47

前提・実現したいこと

パーフェクト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です。

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

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

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

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

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

m.ts10806

2019/04/21 08:47

「詰んだ」だけだと何も要件が含まれていませんので、もう少し質問内容に寄せた要件にしてください。 また、コードはマークダウンのcode機能を利用してご提示ください。 ちょっと気になる点ですが、パーフェクトPHPは私も持っていますが(もう長く読んでいませんが)「自作フレームワーク」の章に入る際に、本当にその章に必要な技術が身についているほどの内容ではない、、という印象です。 オブジェクト指向についてはきちんと理解された上で入られていますでしょうか?
退会済みユーザー

退会済みユーザー

2019/04/21 10:24

コードと思しき部分くらい、自動でマークアップすべきだと思いまちゅ。 いつまでたってもteratailは成長ちまちぇんねぇ。 もう、かいはちゅにかけるお金は無いのでちゅか?
javahack

2019/04/21 16:11

> $loader->registerDirのところでなぜ引数が2つ指定されているのか dirname(FILE).'/core' も dirname(FILE).'/models' もこれで1つの引数です。
退会済みユーザー

退会済みユーザー

2019/04/22 08:36

至らない点多々ありすみません。 回答有り難うございます。 オブジェクト指向はnewして再利用する連想配列みたいなふわっとしたイメージしか持ってないです。 メモリの話とか踏み込んだ話は難しいです……
m.ts10806

2019/04/22 08:39

質問は編集できますので適宜調整してください。 >再利用する連想配列みたいなふわっとしたイメージしか持ってないです。 なるほど。だとしたらだいぶ厳しいかもしれません。もちろん、「だからやめたほうがいい」というわけではなく、ふわっとしたところから「自分で扱える」レベルまでちょっとでもいいのであげてから入ったほうが理解しやすくなる、ということですね。
m.ts10806

2019/04/22 08:40

あ、あとこちらは「質問への追記修正依頼」のコメント欄であって回答ではないです。 質問文への不備や不足の調整をお願いしたり、質問者さんへの確認に利用されます。
guest

回答3

0

ベストアンサー

###参考サイトの紹介です

パーフェクトPHP デバッグ (処理の流れ | ユーザ登録機能作成)
パーフェクトPHP デバッグ (チェックポイント)
パーフェクトPHP デバッグ (その他) (具体的な 環境設定手順)
パーフェクトPHP デバッグ (NetBeans デバッグ方法) (具体的な デバッグ例)

パーフェクトPHP をデバッグしました (学習方法)
パーフェクトPHP をデバッグしました (やる気のある初心者)

$dirs[] は、上記サイト パーフェクトPHP デバッグ (チェックポイント)
ClassLoader に書かれています。(です)

$loader->registerDir(dirname(FILE).'/core');
引数は、ひとつです。

bar_dump は、var_dump だと思います。

IDE デバッグ機能を使えば、ご自分で解決できます。

キーポイントは、「IDE デバッグ機能」です。
最初のうちは大変ですが、頑張ってください。


パーフェクトPHP デバッグ 動作環境
・XAMPP 5.6.31
・NetBeans 8.2

学習環境なので XAMPP 7.x.x (PHP 7.x.x) にする必要はありません。
XAMPP 7.x.x でも動作しますが、Xdebug の準備が必要です。
XAMPP 7.1.14 と NetBeans IDE 8.2 の不具合

サンプルコードは、フレームワークの 使い方 ではなく、
フレームワークとオブジェクト指向の 考え方 について書かれているので
バージョンは、関係ありません。


重要なことですが、オブジェクト指向を理解してから、
パーフェクトPHP の サンプルコード に挑戦するのでは ありません

反対に、パーフェクトPHP デバッグIDE デバッグ機能 を使って、
サンプルコード をデバッグして、オブジェクト指向とフレームワークを理解します。

サンプルコードは、オブジェクト指向のすばらしいお手本 です。

投稿2019/04/21 14:20

編集2019/11/11 01:29
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/04/22 02:03 編集

$dirsはよくわかりました。 ただディレクトリ情報を登録してただけだったんですね…… IDEを早速試してみたのですが…… 画面上のウィンドウ->デバッグ->変数を表示して、新規ウォッチに変数を登録してみたのですが、どう入力してもnull値になってしまいます。簡単な変数を作ってもうまくいきませんでした。 ChromeのNetBeans Connectorを入れてデバッグしてもブレイクポイントで止まってくれないみたいです。 NetBeansで変数の中身を簡単に見たり変更して挙動を確かめたりできるらしいのですが…… 使い方が悪いのか設定が違うのか、わかりません……
退会済みユーザー

退会済みユーザー

2019/04/25 08:16 編集

パーフェクトPHP デバッグ (その他) http://beginner001.html.xdomain.jp/debug-03.html の ・Xdebug ・NetBeans ・XAMPP 7.1.14 と NetBeans IDE 8.2 の不具合 をご覧ください。 デバッグ方法は、同じページの参照先 NetBeans IDEでのPHPソース・コードのデバッグ | ツールバーとエディタの操作 https://netbeans.org/kb/docs/php/debugging_ja.html#work をご覧ください。 ・XAMPP 5.6.31 ・NetBeans 8.2 https://netbeans.org/downloads/8.2/ が、パーフェクトPHP デバッグ の動作環境です。 あえて、XAMPP 7.x.x (PHP 7.x.x) にする必要はありません。 パーフェクトPHP を理解するという目標が、ぶれないようにしてください。     追記 「IDE デバッグ機能」を使った学習効果は実証済です。 プログラムの初心者が、他のどんな方法よりも早く上達した例をたくさん見ています。 パーフェクトPHP の学習「前段階」で挫折しないでください。 挫折の原因の多くは、 「経験者が当たり前に思っていることを、初心者が解決できない場合」がほとんどです。 経験者も、過去には同じような失敗をしているのですが、忘れています。 必要なのは、うまくいくまで頑張る「粘り強さ」だけです。
退会済みユーザー

退会済みユーザー

2019/04/22 08:05

ありがとうございます、xampp5.6.30でできました!! ステップ・インのアイコンが押せるようになって、変数の中身を追えるようになりました。 分かるようになると面白いですね。 しかし、ルートフォルダのframeworkのbootstrap.phpしか、うまくデバックされません。 その他のフレームワークのファイルもurl指定してデバックするとステップ・インのアイコンは点くのですが、一度押したら消えてしまいます。 いろいろ試してみたのですが、変数の宣言とかは追ってくれるのですが、最初のクラス初めの{のところで終わってしまいます。 どうしたらデバッグできるでしょうか?
退会済みユーザー

退会済みユーザー

2019/04/26 07:37 編集

おめでとうございます! 環境設定は、大丈夫だと思います。 デバッグのやり方は、色々あると思いますが、例です。 「必ず」index.php を開いて、index.php からスタートします。←誤りです (無くても動作します) index.php の 3, 4, 6, 7行目に、ブレークポイントを設定します。 (ブレークポイントは、どこでも良いのですが、あくまでも例です) メニュー の デバッグ | ファイルをデバッグ をクリックしてスタートします。 プロジェクト(mini-blog.localhost)をデバッグ (Ctrl+F5)「アイコン」をクリック でもOKです。 ・index.php 3行目でストップ ・ステップ・イン(F7) bootstrap.php に入ります 3行目でストップ ・ステップ・イン(F7) ClassLoader.php に入ります 9行目でストップ ・ステップ・イン(F7) ClassLoader.php を抜けて bootstrap.php に戻り 5行目でストップ ・ステップ・イン(F7) bootstrap.php 6行目でストップ ・ステップ・イン(F7) ClassLoader.php 27行目でストップ (変数の値 設定「前」) ・ステップ・イン(F7) ClassLoader.php 28行目でストップ (変数の値 設定「後」)  dirs[] や $dir にマウスを置くと、変数の値が分かります (「変数」ウィンドウ も使えます)  以下、同様です。 ステップ・イン(F7)、ステップ・オーバー(F8) を使い分けると楽です。     後は、根気よく サンプルコードをデバッグするだけです。 「フレームワーク」「オブジェクト指向」さらに「PHP」も 「処理の流れ」と「変数の値」から理解できます。 頑張ってください。 期待しています。
退会済みユーザー

退会済みユーザー

2019/04/23 09:45

よくわかりました。 実行順にステップ・インしてるんですね。 実行に関係ないクラスはデバックできないのは当たり前でしたね。 自分でも恥ずかしいです。 phpを勉強する自分に大変、ためになる情報をありがとうございます。 これで効率よく勉強できます。 頑張って勉強します。
退会済みユーザー

退会済みユーザー

2019/11/11 01:13 編集

『デバッグのやり方 2』 IDE デバッグ機能 を使ったデバッグ例 http://beginner001.html.xdomain.jp/debug-04.html#NetBeans_debug1   実は、Webアプリケーションの学習で、初心者が一番苦労するのが「環境設定」です。 パーフェクトPHP の学習をする前に挫折しやすい傾向があります。 今回は、うまくいって、本当に良かったです。     『重要なこと』 ~ 以下、(回答者と) コメント発言者 の方へ ~ 「オブジェクト指向」という言葉で、質問者を「委縮」させるコメントがあります。 それを見た時は、とても嫌な気持ちになりました。 こちらのサイトは、プログラム関連の疑問をサポートするサイトです。 質問者は、分からないので「勇気」を出して質問しています。 コメント発言者は、それを考えるべきです。 技術に関して優秀な人は、人格的にも優しい人が多いです。 (回答者と) コメント発言者は、「優しく」「丁寧に」答えてください。 質問者を「委縮」させる発言に対しては「スルー」することを、お薦めします。     世の中には、さまざまな「学習方法」があります。 ・「ラーメン道場で、1週間の修行」「すし職人を3ヶ月で養成」  どちらも、授業料は高いですが、一人前に育つそうです。 ・予備校も「スマホ」で効率良く受講できます。 ・「YouTube」で、塾に行けない生徒達に授業を公開している 優秀な元塾の先生もいます。 プログラム関連も、下積み修行する時代ではありません。 今は「学習方法」として、ツールも含めて 良い方法がたくさん有ります。
退会済みユーザー

退会済みユーザー

2019/07/21 00:24 編集

削除しました。
urlAddChange

2020/04/19 06:53 編集

--- url変更 --- パーフェクトPHP デバッグ (処理の流れ (1/5) | ユーザ登録機能作成) 全5パターン https://perfectphp-debug.netlify.com/debug-02-1.html パーフェクトPHP デバッグ (チェックポイント) https://perfectphp-debug.netlify.com/debug-01.html パーフェクトPHP デバッグ (その他) 環境設定等 https://perfectphp-debug.netlify.com/debug-03.html パーフェクトPHP デバッグ (NetBeans デバッグ方法) https://perfectphp-debug.netlify.com/debug-04.html
urlAddChange

2021/04/03 06:37 編集

--- url追加 --- 【動画 (YouTube)】 パーフェクトPHP をデバッグしました (デバッグ例 基本編) オートロード https://youtu.be/F-QJCXH2Xm0 パーフェクトPHP をデバッグしました (デバッグ例 応用編) CSRF対策 https://youtu.be/htohdTY26D0 パーフェクトPHP をデバッグしました (デバッグ例 応用編) アウトプットバッファリング https://youtu.be/U58DL8_iAvI パーフェクトPHP をデバッグしました (デバッグ例 応用編) DbManagerクラス https://youtu.be/najYeNBB1xM
guest

0

まだ7章を読むのは早いんじゃないでしょうか。
6章までを反復しましょう。

他の方も書いていますが、引数は1つです。
ピリオドとカンマは違います。
カンマだったら確かに引数は2つですが、
ピリオドは「文字列の連結」です。引数は1つです。

あと、コードの記述にはコーディングブロック記述を使ってください。
__FILE__ がコーディングブロックに入っていないおかげで、 FILEが斜字体になっています。

あと、foreachfor + eachです。
「フォリーチ」と記述している時点で理解が足りていない可能性があります。(本書にそう書いてあるなら、その限りではありませんが)

投稿2019/04/21 16:56

編集2019/04/21 16:58
takepan1973

総合スコア821

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

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

退会済みユーザー

退会済みユーザー

2019/04/21 22:06

すみません、文字列の連結もフォリーチの件も私の勘違いでした、知識の無さとまったくの素人ぶりを発揮してしまい恥ずかしいい限りです。
takepan1973

2019/04/21 22:34

誰でも最初は知識がない状態からのスタートです。気にすることはありません。 `bar_dumpしたけど何故かうまくいかなかった。 なぜかエラーが出ます。` というときに、エラーメッセージは何だろう、と確認する姿勢こそが大事なのだと思います。
guest

0

本は持っていませんが、dirname(__FILE__) は、ClassLoader.php の置かれているディレクトリのパスを返します。よって、そのディレクトリにある coremodels のパスが $this->dirs の中に入っているはずです。bar_dump ではなく var_dump すると表示されるのではないでしょうか。

なぜこれらのパスを変数に入れるのかについては、本を持っていないのでわかりません。書いていないとしたら不親切な気がしますが、見落としている可能性はないですか?

投稿2019/04/21 13:54

iwamot

総合スコア1154

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問