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

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

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

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

1回答

1565閲覧

パーフェクトPHPにて、お聞きしたい箇所があります。

newyee

総合スコア213

PHP

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

0クリップ

投稿2019/03/07 06:20

PHPの学習の為、パーフェクトPHPを読んでいたのですが、完全につまずいてしまった為、ご助言頂きたくご質問させていただきました。
つまずいてしまった箇所は、第7章の「フレームワークによる効率的な開発」の部分になります。

php

1<?php 2 class ClassLoader{ 3 protected $dirs; 4 5 public function register(){ 6 spl_autoload_register(array($this,'loadclass')); 7 } 8 public function registerDir($Dir){ 9 $this->dirs[] = $dir; 10 } 11 12 public function loadClass($class){ 13 foreach($this->dirs as $dir){ 14 $file = $dir . '/' . $class .'.php'; 15 if(is_readable($file)){ 16 require $file; 17 18 return; 19 } 20 } 21 } 22 23 } 24 25 26?>

上記は、オートロードに関する処理をまとめたクラスである、「ClassLoader.php」になります。
「ClassLoader.php」の「register」メソッドでは、PHPにオートローダクラスを登録する処理、そして、loadClassメソッドには、オートロードが実行された際にクラスファイルを読み込む処理となります。
お聞きしたい部分なのですが、他の個所につきましても、分からない部分は多いのですが、第一にお聞きしたい部分は、「register」メソッドの「spl_autoload_register」関数についてです。
PHPマニュアルを参照してみたのですが、良く意味が分かりませんでした...
そして、第2に「registerDir」メソッド内についてです。メソッド内では、「$this->dirs[]」となっているのですがここの$thisはClassLoader内の「protected $dirs;」変数を指しているという理解で合っていますでしょうか?

まだ分からない点があるのですが、ここの2点が解決されましたら他の個所も分かるようになる気がします...
どなたか、ご助言頂ける方いらっしゃいましたら、幸いです。よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

「register」メソッドの「spl_autoload_register」関数についてです。

spl_autoload_registerは、オートロードが必要になった際に指定された関数を呼び出すように登録する、という関数です(PHPマニュアル)。引数が配列になっていますが、関数(callable)を必要とする引数に[オブジェクト, メソッド名]という配列を渡すと、「そのオブジェクトメソッドを呼び出す」という意味になります(PHPマニュアル)。

全体を通せば、「オートロード発生時に$this->loadClassを呼び出す」ということになります。

ここの$thisはClassLoader内の「protected $dirs;」変数を指しているという理解で合っていますでしょうか?

$thisClassLoaderインスタンスを指しています。$this->dirsprotected $dirs;と対応しています。

投稿2019/03/07 06:27

maisumakun

総合スコア145184

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

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

maisumakun

2019/03/07 06:29

なお、Composerが普及した現代PHPでは、オートロードはComposerの生成したオートロード関数を使うのが一般的で、オートロード関数を自分で書くのは特殊な処理を入れたい場合に限られます。
newyee

2019/03/07 06:47

ご丁寧に教えて頂きありがとうございます。 正直まだ、先が長いので理解しきれるのか不安ではあるのですが、なんとかここの部分が理解できてよかったです...助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問