我一直在使用CodeIgniter框架,但是在学习Java和很棒的功能(如Interfaces,Abstract classes,package)之后,PHP 5也支持大多数这些功能,我已经准备好毕业并构建一个 PHP中的真实 OO框架,它使用所有这些功能(包括名称空间),因此我可以构建更优雅的设计。
我在想的是,系统中的所有内容都不像CodeIgniter中那样共享一个$this->
对象,例如:
$this->load->model('box');
$this->box->something();
您可以执行以下操作来加载Box
模型并调用其something()
方法。
$box = new Framework\Models\Box();
$box->something();
或以下
abstract class BaseController
{
public function getModel($name)
{
$model = new Framework\Models\$model(); //Is this valid code?
return $model;
}
}
class MyController extends BaseController
{
public function index()
{
$box = $this->getModel('box');
$box->something();
}
}
是否有任何关于构建它的建议/指针,例如框架需要哪些最小系统类,我应该具有哪些命名空间或任何其他功能?
答案 0 :(得分:11)
我注意到的一件事是,框架通常是为特定目的而构建的。通用框架(如CodeIgniter)适用于较小的站点,可以快速启动和运行。然而,一旦你有了特定的东西,这些东西不属于通用框架,你自己的构建就会成为现实。
我唯一建议的是保持一致。这是无情的一致。如果您决定在camelCase中命名,那么请不要偏离。或者,如果您决定使用NounVerb命名方法约定,即spaceJump
,那么即使它当时听起来更好,也不要切换到jumpSpace
。
选择接受参数的方式并保持一致。您是否只接受参数或参数的关联数组?选择并坚持下去。
在你写任何东西之前我也不会过度工程。在你需要重构之前,一致性事情会带你到很远...但我也不会害怕这样做。 (一两个单元测试可以减轻这些担忧)。
是的,只要你保持一致,通常没有正确或错误的做事方式。我提到了......保持一致!
答案 1 :(得分:5)
构建技术框架(没有冒犯)需要很多经验,而且已经有1 000个CMS /基础对象(会话管理,ORM等)framworks / libraries。
而不是浪费宝贵的时间(不再冒犯),你最好不得不:
答案 2 :(得分:4)
您可以构建自己的,但为什么不利用可用框架中包含的庞大库,并在必要时扩展其功能。
你为什么不看看Zend框架。
入门起来相当快,并且包含许多有用的库和类作为标准。如果你只是希望获得更多的OOP经验,这对个人项目来说是好事。
答案 3 :(得分:3)
我会看Kohana。它来自CodeIgnitor,加载模型等就像你提出的那样完成。
查看他们的核心功能,其中许多功能与您的问题直接相关(我已经强调了这些功能):
Kohana如何与众不同?
虽然Kohana重复使用了许多常见的设计模式和概念,但有些东西使Kohana脱颖而出: