PSR-0规范

1.命名空间必须与绝对路径一致

2.类名首字母必须大写

3.除入口文件外,其他的'.php'必须只有一个类

开发符合PSR-0规范的基础框架

1.全部使用命名空间

2.所有php文件必须使用自动载入,不能有include/require

3.单一入口

根目录下新建index.php文件,代码如下

<?php
define('BASEDIR',__DIR__);
include BASEDIR.'/Config/Loader.php';
spl_autoload_register('\\Config\\Loader::autoload');
IMooc\Object::test();
App\Controller\Home\Index::test();
?>

新建Config/Object.php

<?php
namespace Config;
class Object{
static function test(){
//echo "this is IMooc Object 方法";
}
}
?>

新建Config/Loader.php

<?php
namespace Config;
class Loader{
static function autoload($class){
require  BASEDIR.'/'.str_replace('\\','/',$class).'.php';
}
}
?>

新建App/Home/Index.php

<?php
namespace App\Controller\Home;
class Index{
static function test(){
echo "this is home php ";
//echo __METHOD__;
}
}
?>

工厂模式

工厂方法或者类生成对象 而不是在代码中直接new
新建Config/Factory.php

<?php
namespace Config;
class Factory{
static  function createDatabase(){
//$db = new Database;
$db = Database::getInstance();
Register::set('db1',$db);
return $db;
}
}
?>

index.php调用
$db = Config\Factory::createDatabase();

单例模式

使某个类的对象仅允许创建一个
新建Config/Database.php

<?php
namespace Config;
class Database{
protected static $db;
private function __construct(){}
public static function getInstance(){
if(self::$db){
return  self::$db;
}else{
self::$db = new self();
}
}
function where($where){
return  $this;
}
function order($order){
return  $this;
}
function limit($limit){
return  $this;
}
function test(){
echo 1;
}
}
?>

index.php调用
$db = Config\Database::getInstance();

$db = Config\Database::getInstance();

$db = Config\Database::getInstance();

$db->test();

注册模式

全局共享和交换对象
新建Config/Register.php

<?php
namespace Config;
class Register{
protected static $objects;
function set($alias,$object){
self::$objects[$alias] = $object;
}
function get($name){
return self::$objects[$name];
}
function _unset(){
unset(self::$objects[$alias]);
}

}