<?php
class Example
{
// Параметризированный фабричный метод
public static function factory($type)
{
if (include_once 'Drivers/' . $type . '.php') {
$classname = 'Driver_' . $type;
return new $classname;
} else {
throw new Exception ('Драйвер не найден');
}
}
}
?>
Определение этого метода в классе позволяет драйверам быть
загруженными "на лету". В случае, если класс Example
был бы классом абстрактного доступа к базе данных, то загрузка
драйвера MySQL и SQLite
может быть выполнена следующим образом:
<?php
// Загрузка драйвера MySQL
$mysql = Example::factory('MySQL');
// Загрузка драйвера SQLite
$sqlite = Example::factory('SQLite');
?>