必要なクラスファイルを自動でインクルードする
前提1
クラス名.class.php で、1クラス1ファイルにしておく。
前提2
autoload.phpを作る。
<?php
function __autoload($name) {
require_once($name.’class.php’);
}
?>
使い方
require_once(‘autoload.php’);
$object = new MyClass();
new MyClass() すると MyClass.class.php が自動的にインクルードされる。
未定義のメソッドを呼んだらどうなるか?
答:__call メソッドが実行される。
ちなみに__callメソッドは、メソッド名と引数値の配列を受け取る。
未定義のプロパティを取得/設定しようとしたらどうなるか?
答:__getメソッド、__setメソッドが実行される。
オーバーロード?
通常の意味のオーバーロード
public void getAbs(int i ) { return iの絶対値; }
public void getAbs(float f) { return fの絶対値; }
public void getAbs(double d) { return dの絶対値; }
のように、同名のメソッドを引数の内容(シグネチャ)によって切り替えること。
似た機能に少しずつ異なる名前を付ける不便を解消する。
PHPで言うところのオーバーロード
上で出た、未定義のメソッドを呼ぶと__callが実行されること。意味不明。
※PHPでは変数のデータ型を意識しないので、とりあえず受け取って、メソッド内で仮引数のデータ型をチェックして振り分ければよいのか?
function hoge() {
$args=func_get_args(); //引数を配列$argsにセット
if (is_numeric($args[0])) {
//最初の引数が整数だったときの処理
}
}

