在PHP中构建一个真正的面向对象框架,需要建议

Cli*_*ote 4 php oop codeigniter

我一直在使用CodeIgniter框架,但是在学习Java和界面,抽象类,包等很棒的功能之后,PHP 5也支持大部分这些功能,我已经准备好毕业并用PHP 构建一个真正的 OO框架.使用所有这些功能(包括命名空间),因此我可以构建更优雅的设计.

我在想的是,系统中的所有内容都$this->不像在CodeIgniter中那样共享一个对象,例如:

$this->load->model('box');
$this->box->something();
Run Code Online (Sandbox Code Playgroud)

您将执行以下操作来加载Box模型并调用其something()方法.

$box = new Framework\Models\Box();
$box->something();
Run Code Online (Sandbox Code Playgroud)

或者以下

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();
   }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何关于构建它的建议/指针,例如框架需要哪些最小系统类,我应该具有哪些命名空间或任何其他功能?

nul*_*ull 11

我注意到的一件事是,框架通常是为特定目的而构建的.通用框架(如CodeIgniter)适用于较小的站点,可以快速启动和运行.然而,一旦你有了特定的东西,这些东西不属于通用框架,你自己的构建就成了现实.

我唯一建议的是保持一致.这是无情的一致.如果您决定在camelCase中命名,那么请不要偏离.或者,如果您决定使用NounVerb命名方法的约定,即使当时"听起来"更好,spaceJump也不要切换到jumpSpace.

选择接受参数的方式并保持一致.您是否只接受参数或参数的关联数组?选择并坚持下去.

在你写任何东西之前我也不会过度工程.在你需要重构之前,一致性事情会带你到很远...但我也不会害怕这样做.(一两个单元测试应该可以减轻这些担忧).

是的,只要你保持一致,通常没有正确或错误的做事方式.我提到了......

始终如一!


Tot*_*oto 5

构建技术框架(没有冒犯)需要很多经验,并且已经有1 000个CMS /基础对象(会话管理,ORM等)framworks/library.

你最好不要浪费宝贵的时间(不再冒犯),而是:

  1. 评估并选择更适合您需求的框架(有些框架具有非常好的OO架构).
  2. 学习将使用这个好框架.
  3. 构建自己的 OO 业务/应用程序框架.(这是您可以学习,区分和创造价值的地方).