本次代码符合PHP规范PRS_0,根目录下新建一个Frame的目录(核心目录),建立APP目录(项目目录),统一访问入口文件index.php,建立类文件Loader.php(用于自动加载类)
index.php 公共部分
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');
Loader.php
<?php
namespace Frame;
class Loader
{
static function autoload($class)
{
require BASEDIR.'/'.str_replace('\\','/',$class).'.php';
}
}
单例模式
- 特点(不允许直接实例化对象 不允许对象克隆。)
- 场景(假如我们多个文件的创建连接一个数据库,这样就浪费了数据库资源。)
我们修改一下Database.php文件
<?php
namespace Frame;
class Database
{
static protected $db;//保存实例
private function __construct(){}//禁止new
private function __clone() {}//禁止克隆
static public function getInstance()
{
if (self::$db) {
return self::$db;
} else {
self::$db = new self();
return self::$db;
}
}
}
index.php中调用
<?php
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');
$db = \Frame\Database::getInstance();//保证到数据库的连接只有一个
我们现在可以把之前的工厂模式和单例模式结合起来,修改Factory.php
<?php
namespace Frame;
class Factory
{
static public function createDatabase()
{
//$db = new \Frame\Database();//工厂模式
$db = Database::getInstance();//结合单例模式的工厂模式
return $db;
}
}
index.php中调用
<?php
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');
\Frame\Factory::createDatabase();
One comment
单例模式,使某个类的对象仅允许创建一个