<?php
define("BASDIR",__DIR__);
include BASDIR."/Phpclass/Loader.php";
spl_autoload_register("\Phpclass\Loader::autoload_rege");
//$db= new PhpclassFactory();
//在Factory.php中 的类中创建一个静态函数然后,在函数中创建一个对象并返回对象;这样子,就可以直接调用这个函数;从而达到创建对象的目的
$db = PhpclassFactory::createDatabase();//再次设置后,就是工厂加单例模式
echo "这是工厂模式
";
$db->where("11--
");
//var_dump($db);
//单例模式,在Database.php中进行了相关的设置
echo "这是单例模式------
";
$db = PhpclassDatabase1::getInstance();//获取单例模式的实例
var_dump($db);
$db = PhpclassDatabase1::getInstance();//获取单例模式的实例
$db->order("同一个ID#2
");
$db = PhpclassDatabase1::getInstance();//获取单例模式的实例
$db = PhpclassDatabase1::getInstance();//获取单例模式的实例
$db->where("--test it's ok just a test-----
");
$res=$db->where("2111--")->update("888+++")->order("33--")->limit("admin--");
var_dump($res);
echo "这是注册树模式------
";
PhpclassFactory::createDatabase();//单例模式的实例化一个对象(必须要实例化,不然,就无法注册)
echo "第3.5步,在拿对象使用前,必须调用PhpclassFactory::createDatabase(),实例化对象,不然后,没有对象的存在,就无法注册";
$db = PhpclassRegister::get('db1');
echo "第四步index1.php,调用PhpclassRegistor::get(name),拿对象用
";
//var_dump($db);
$db->where("id=6,对象相关方法的调用
");
---------------------------------------------------------------------------------Index1.php
<?PHP
namespace Phpclass;
class Loader
{
static function autoload_rege($class)
{
include BASDIR.'/'.str_replace("\","/",$class).".php";
}
}
---------------------------------------------------------------------------------Loader.php
<?php
namespace Phpclass;
//工厂模式是惯用的基础模式,其它高级模式都依赖于它
class Factory
{
static function createDatabase()
{
// $db = new PhpclassDatabase();//若用了单例模式,工厂模式也就不能用new了(用new,就是传统的多态模式,相对浪费资源)
// return $db; //这就是工厂模式
// $db = Database1::getInstance();这是单例模式
$db = Database1::getInstance();//这里用的是单例模式,即在Database1.php里面,创建一个自己new自己的静态方法,这边再调用
// return $db;然后再返回这个对象;这样子,可以在new自己的时候判断,是否已经创建,若创建了就不再创建,若没有再创建,这样子就更
// 省资源,到这里,就可以理解为 工厂模式和单例模式的组合
echo "第0步创建一个单例模式的对象Factory.php->调用Databases1::getinstance()
";
Register::set('db1',$db);//把单例模式中创建的对象,都放到一个数组里面, 这样就变成了注册树模式
echo "第二步注册对象,调用Register::set(),
";
return $db;//若是用注册树模式,就没有必要返回值了,为了让工厂模式和单例模式都能显示出来,所以,就给了一个返回值
}
}
---------------------------------------------------------------------------------Factory.php
<?php
namespace Phpclass;
class Register
{
protected static $objects;//这里把所有的对象存放到的个数组里面
static function set($alias,$obj)//把一个对象注册到注册树上
{
self::$objects[$alias] = $obj;
echo "第一步把注册好的对象,放到数组里面去,Register.php
";
}
static function get($alias)
{
return self::$objects[$alias];
}
function _unset($alias)
{
unset(self::$objects[$alias]);
}
}
---------------------------------------------------------------------------------Register.php
<?php
namespace Phpclass;
class Database1
{
//这里对就是的是php的单例模式--------
// static protected 和 protected static 没有区别的
//常用的修饰有 public protected private 可以理解为三种不同的权限范围,这三种可以用$this->$name来调用
// 而static,修饰他们,表示静态方法 只能用self::$name,来调用,而其值,是保存在静态变量中的,有时需要被释放或销毁
static protected $db;
protected function __construct(){}//当把__construct()变为保护或私有时,就无法再被本类外 new一个对象了,因为,这时
//__construct()方法,只能在本类中被调用,所以只有在类中被实例化
static function getInstance()//在static function函数中,不能使用$this,
{
if(self::$db){
return self::$db;
}else{
self::$db = new self();//new self() =new static(),在没有父类的情况下,两者没有区别,
//若有继承父类new self(),可能指大类, 而new static,指向调用者的本类
//new self()= new Database1(),即,在本类中,被protected/private修饰后,只能在本类中调用
//若有继承,protected,可以调用父类,而private只能调用本类
return self::$db;
}
}
//这里对就是的是php的单例模式----------
function where($where)
{
echo "--admin".$where;
return $this;//关键点,若用链条式语句,PHP 中 return $this,的含义为:返回自身
}
function update($id)
{
echo $id;
return $this;
}
function limit($count)
{
echo $count;
return $this;
}
function order($order) {
echo $order;
return $this;
}
}
---------------------------------------------------------------------------------Database1.php