注册的时候感觉工厂模式还是要的,防止业务逻辑里面的类名改名或者加参数。工厂静态方法调用后Register下。
index.php
define('BASEDIR',__DIR__);
include BASEDIR.'/Core/Loader.php';
spl_autoload_register('\\Core\\Loader::autoload');
//一般初始化环境时候注册类 然后每次从注册树上面拿类。
\Core\Factory::createDatabases();
$db= \Core\Register::get('db1');
$db->conn();
?>
database.php
namespace Core;
class Database{
protected static $db;
private function __construct(){
}
public static function getInstance(){
if(self::$db){
return self::$db;
}else{
self::$db=new self();
return self::$db;
}
}
public function conn(){
echo "this is a method of connect database;";
}
}
?>
register.php
namespace Core;
class Register{
protected static $objects;
static function set($alias,$object){
self::$objects[$alias]=$object;
}
static function get($name){
return self::$objects[$name];
}
function _unset($alias){
unset(self::$objects[$alias]);
}
}
Factory.php
namespace Core;
class Factory{
public static function createDatabases(){
$db=Database::getInstance();
Register::set('db1',$db);
// return $db;
}
}