我刚刚进入OOP和框架设计.我已经开始使用以下三个教程;
http://net.tutsplus.com/tutorials/php/creating-a-php5-framework-part-1/
http://net.tutsplus.com/tutorials/php/create-a-php5-framework-part-2/
http://net.tutsplus.com/tutorials/php/create-a-php5-framework-part-3/
这是我尝试使用的第一个框架,因为本教程并非针对完整的新手我发现自己不得不对代码进行反向工程以查看一切是如何工作的.问题是我被困住了.
首先,我了解框架的基本概念,包括目录结构.
其次,我理解了注册表和数据库类的用途(尽管我还没有完全理解它们中的每个函数).
我的问题来自index.php,template.class.php和page.class.php文件.我广泛知道每个应该做什么(虽然进一步解释会很好!)但我不知道它们如何组合在一起,即索引页面如何与模板和页面对象交互以实际生成显示的页面.我特别无法按照所谓的一切顺序解决问题.
该指数在我看来是:
>需要注册表类
>创建注册表实例(不太明白这一点 – 访问数据库的简单方法?)
>存储数据库和模板对象
>从存储的数据库对象创建新连接
>选择页面的皮肤
然后,这就是我迷路的地方:
>通过buildFromTemplates函数构建实际页面(我无法理解)
>缓存数据库查询
>分配标签(我完全丢失标签是什么!)
>设置页面标题
>显示内容
任何人都可以帮我解决这个问题吗?我在此之前尝试过Zend,但它太复杂了,这个更容易访问,但是你仍然可以让我感到难过(虽然我已经开始通过尝试了解更多的对象).
提前致谢.
解决方法:
首先,我认为他们过度复杂了Registry模式的实现.我总是使用以下方法,这是更直接的(我将打印它的简化版本).
class Registry {
protected static $_instances = array();
public static function add($instance, $name) {
self::$_instances[$name] = $instance;
}
public static function get($name) {
return self::$_instances[$name];
}
}
登记处与单身人士合并只是一团糟.
关于你迷路的方面:
1. buildFromTemplates
Method接受无限数量的参数func_get_args()作为模板文件位置,相对或绝对.如果相对(如在皮肤中/不是参数send的一部分)用绝对位置覆盖保存名称$bit的变量.如果文件存在,则读取变量$content.重复直到使用所有方法参数,并将最终结果添加到Page类.
2.查询缓存
如果给定的查询没有返回resource_id(数据库查询应该),则表示查询未成功执行,方法触发并发生错误.否则,将resource_id保存在属性queryCache中以供以后使用.例如:
// assume $db is a reference to the database object and that this is the first
// query
$db->cacheQuery('SELECT * FROM whatever');
$results = $db->resultFromCache(0); // previous query resource_id
……啊,忘了.
这是如此混乱,而是建议你从一些理智的框架开始,有利于学习内部工作.与CodeIgniter一样,当这些概念明确时,继续前进.
本教程充满了错误的决定,例如错误而不是异常,紧密耦合,自定义模板引擎(普通PHP已经足够)等等.
即使是symfony,这是一个很大的框架并不难以遵循.