teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

具体例を追加

2016/06/09 13:26

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -3,6 +3,16 @@
3
3
  - [PHP Manual - クラスのオートローディング](http://php.net/manual/ja/language.oop5.autoload.php)
4
4
  - [Qiita - PHP で、spl_autoload_register を使って、require_once 地獄を脱出しよう](http://qiita.com/misogi@github/items/8d02f2eac9a91b4e6215)
5
5
 
6
+ ```php
7
+ // 例
8
+ spl_autoload_register(function ($classname) {
9
+ $path = __DIR__ . '/' . $classname . '.php';
10
+ if (file_exists($path)) {
11
+ require $path;
12
+ }
13
+ });
14
+ ```
15
+
6
16
  これをベースに更に規約を設けて,オートローディングのための関数すら自分で書く必要を無くした仕組みを導入したものが,PHPのパッケージマネージャ「Composer」として用意されています.**PSR-4**という規約(あるいは旧式のPSR-0)に則ってクラスを作成およびファイルを配置すれば,PHPが提供している`spl_autoload_register`という関数を利用して自動的に読み込みを行ってくれます.
7
17
 
8
18
  - [PHP開発でComposerを使わないなんてありえない!基礎編](http://qiita.com/niisan-tokyo/items/8cccec88d45f38171c94#create-project)

1

補足

2016/06/09 13:26

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -5,7 +5,30 @@
5
5
 
6
6
  これをベースに更に規約を設けて,オートローディングのための関数すら自分で書く必要を無くした仕組みを導入したものが,PHPのパッケージマネージャ「Composer」として用意されています.**PSR-4**という規約(あるいは旧式のPSR-0)に則ってクラスを作成およびファイルを配置すれば,PHPが提供している`spl_autoload_register`という関数を利用して自動的に読み込みを行ってくれます.
7
7
 
8
+ - [PHP開発でComposerを使わないなんてありえない!基礎編](http://qiita.com/niisan-tokyo/items/8cccec88d45f38171c94#create-project)
8
9
  - [Qiita - PSR-4 autoloader (日本語訳)](http://qiita.com/inouet/items/0208237629496070bbd4)
9
10
  - [ngの日記 - Composer が PSR-4 に対応していた](http://ngyuki.hatenablog.com/entry/2014/01/09/203427)
10
11
 
11
- なおこの仕組みは,他者が提供しているライブラリを`composer install`でインストールした場合だけでなく,自分のプロジェクト内のファイルに対しても適用が可能です.`composer install`あるいは`composer update`のタイミングで,自分のプロジェクト内の各クラスに対するオートローダが定義されます.
12
+ この仕組みは,他者が提供しているライブラリを`composer install`でインストールした場合だけでなく,自分のプロジェクト内のファイルに対しても適用が可能です.`composer install`あるいは`composer update`のタイミングで,自分のプロジェクト内の各クラスに対するオートローダが定義されます.
13
+
14
+ なお大前提として,ディレクトリ構成からして変えたほうがいいかと思います.**HTTPでアクセスする必要のないファイルは公開ディレクトリの外に起きましょう.**例えば以下の例では`www`を公開ディレクトリとし,`http://example.com/archive.php`が`project/www/archive.php`に対応することを想定しています.
15
+
16
+ ```html
17
+ project
18
+ |--.git
19
+ |--composer.json
20
+ |--vendor
21
+ | `--autoload.php
22
+ |--class
23
+ | |--controller
24
+ | |--model
25
+ | `--view
26
+ `--www
27
+ |--css
28
+ |--img
29
+ |--js
30
+ |--archive.php
31
+ |--home.php
32
+ |--login.php
33
+ `--setting.php
34
+ ```