コアシステムクラスの作成
CodeIgniter が実行されるたびに、フレームワークの一部として自動的に初期化される基本クラスがいくつかあります。しかし、コアシステムのクラスをユーザバージョンのクラスと置き換えたり、コアシステムのクラスを拡張したりすることもできます。
ほとんどのユーザにとっては、そうすることは、まず必要ないでしょう。しかし、CodeIgniter のコアを大きく変えたい人のために、置き換えたり拡張したりできる選択肢が用意されています。
Note: コアのシステムクラスを扱うと様々な影響が出てきますので、コアクラスを変更する前には、必ず、変更することで何が起こるかを調べるようにしてください。
システムクラスのリスト
下記は、Code Igniterを実行する度にいつも読み出されるコアシステムファイルのリストです:
- Benchmark
- Config
- Controller
- Exceptions
- Hooks
- Input
- Language
- Loader
- Log
- Output
- Router
- URI
コアクラスの置き換え
デフォルトのクラスの代わりにユーザ定義のシステムクラスを使うには、単に、ユーザが作成したバージョンのものを application/libraries ディレクトリの中に配置するだけです:
application/libraries/some-class.php
このディレクトリが存在しない場合は、自分で作成することもできます。
ファイル名は、上のリストの中にある通常のものと置き換えるものの名前と同じ名前にします。
ユーザクラスには、 CI をプリフィックスとして使わなければならないことを注意してください。たとえば、ファイルが Input.php という名前ならクラスは次のように名付けます:
class CI_Input {
}
コアクラスの拡張(継承)
既存の関数に何かの機能を追加する - おそらく一つか二つのメソッド追加 - だけでよいのであれば、ライブラリの全部をユーザ定義のものに置き換えてしまうのはやり過ぎです。このようなケースでは、クラスを単に拡張(継承)するのが適しています。クラスの拡張はクラスの置き換えと次の2点を除いてよく似ています:
- クラス宣言では親クラスを継承する必要があります。
- 新しいクラスの名前とファイル名には、MY_ というプリフィックス(この項目は変更できます。このページの下の方をご覧ください)を付ける必要があります。
たとえば、ネイティブのInputクラスを拡張するには、application/libraries/MY_Input.php という名前のファイルを作成し、次のようにクラス宣言をします:
class MY_Input extends CI_Input {
}
Note: ユーザクラスでコンストラクタを使う場合は親クラスのコンストラクタを呼ぶのを忘れないでください:
class MY_Input extends CI_Input {
function MY_Input()
{
parent::CI_Input();
}
}
Tip: 親クラスのメソッドと同じ名前のユーザクラスのメソッドはみな、ネイティブのものと置き換えられて使用されます ("メソッドのオーバーライド" として知られています ). これにより、実質的に、CodeIgniter のコアを置き換えることができます。
もしコントローラのコアクラスを拡張したいなら、コントローラのコンストラクタに新しいクラスを継承させます。
class Welcome extends MY_Controller {
function Welcome()
{
parent::MY_Controller();
}
function index()
{
$this->load->view('welcome_message');
}
}
ユーザクラスのプリフィックス(接頭辞)の設定
ユーザ作成のサブクラスにつけるプリフィックスを設定するには、application/config/config.phpファイルを開き、次の項目を探して設定してください:
$config['subclass_prefix'] = 'MY_';
CodeIgniter の全ネイティブライブラリには CI_ というプリフィックスがついているのを注意してください。ユーザ作成クラスのプリフィックスには、この CI_ を使用してはいけません。