慕粉1745368135
奋斗de小蜗牛
这种案例在框架中用的比较多,你可以看下Thinkphp 6 和 Laravel这两种框架,尤其是Laravel把设计模式用到了极致
qq_流沙_28
我认为是request到response这段周期,response之后就会内存释放
qq_深都_03155654
类是接口的实例,对象是类的实例。
接口中定义的方法为全局方法(动作),老师讲的数据库操作的三个类(POD,mysql,mysqli)是IDatabase接口的三种实现方式,定义之后可以通过以上三种方式进行数据库的相关操作,而公共函数只是封装的代码段,不能实现上述功能,----当然,你也可以封装三个对应的公共函数 --- 但一般不会这么干......
又巍
可以这样理解
Bester
要先执行的。视频里面说的是,以后可以通过框架,工厂方法会在初始化的时候就执行。
天天1151
To_Be_Jam
文件没有引进来
yzx0405
小的会好些
yeszao
this
一直在浪上
打印一下对象看看,我觉得是phpstorm的问题
心无所系丶随遇而安
所以spl_autoload_register可以有多个参数,用逗号分隔,你可以写多个autoload函数啊,而且自动加载类是可以加载不同命名空间的其他类的,要看你的autoload函数怎么写了
Founde1111
percy8223827
这个模式单独使用就是一个鸡肋,必须要先执行一下工厂模式才能注册到注册器,应用到框架上都是在初始化的时候将要注册的类全部执行一下才能通过注册器获取得到,否则返回NULL
带鞋拖地
需要将$this->conf 修改成一个static $conf,单例的对象是保存在类静态属性中的。
行者_Jerry
洪炉百炼生
这个是自己注册,哪不妥了
橙小胖胖
xnceo
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]);
}
}在注册器类中 $Object 是静态属性对吧,因此其生命周期等同全局变量的生命周期,程序结束后才会被销毁。因此在你需要的地方这样调用
$db = DataBase::getInstance(); // DataBse对象
Register::set('db1',$db); // 把对象$db注册到全局树上它的别名为db1如果你是跟着Rango写的使用的时候记得先调用一下工厂方法createDatabase()去获取db对象,因为老师的注册方法写在工厂方法里的
namespace IMooc;
class Factory
{
static function createDatabase()
{
$db = DataBase::getInstance();
Register::set('db1',$db);
return $db;
}
}你在入口文件index.php中,这样来调用:
// 注册树模式 注意一般注册对象会放在项目初始化的位置
$db = IMooc\Factory::createDatabase();
$db1 = \IMooc\Register::get('db1');
var_dump($db1);打印结果就不会是NULL啦