相关疑难解决方法(0)

PHP OOP核心框架

我刚发布这个问题,所以你们中的一些人可能会以正确的方式指出我.我正在慢慢升温到OOP,开始理解这个概念.我想建立一个良好的核心或基础,用作CMS后端.它也将使用MVC.我一直在使用http://gilbitron.github.com/PIP/作为MVC基础.

我无法弄清楚的事情如下:

比如说,在后端的项目页面上我有两个部分:htmltext和项目,我应该能够编辑它们.uri将类似于:// domain/backend/projects(该方法将是索引并显示2个部分)

当我点击项目时应该如何处理?// domain/backend/projects/projects /或// domain/backend/projects/list /

更进一步,项目将保存一些图像或图库://域/后端/项目/编辑/ 5 /图库/ 2

我的问题是,首先:这是一个很好的方法,更重要的是如何在OOP中实现

主要项目控制人:

class projects {

    function index(){
        // view index
    }

    function edit{
        $project = new Project();
        $projectdata = $project->load(5);
    }
}
Run Code Online (Sandbox Code Playgroud)

单个项目控制器

class project {

    function __construct(){
        $this->projectmodel = $this->loadModel('project_model'); // prepare the model to be used
    }

    function load($id){
        $this->projectmodel->loadproject($id);
    }
}
Run Code Online (Sandbox Code Playgroud)

项目模型

class project_model extends model { //extends for DB  access and such

    function __construct(){
        // do stuff
    }

    function loadproject($id){
        return …
Run Code Online (Sandbox Code Playgroud)

php oop class object content-management-system

5
推荐指数
2
解决办法
4420
查看次数

在ORM模型中处理脏状态的最佳方法

我不希望任何人说"你不应该重新发明轮子,使用开源ORM" ; 我有一个立即的要求,不能切换.

我正在做一些支持缓存的ORM.即使不支持缓存,我仍然需要此功能,以便知道何时将对象写入存储.模式是DataMapper.

这是我的方法:

  • 我想避免运行时内省(即猜测属性).
  • 我不想使用CLI代码生成器生成getter和setter(实际上我使用NetBeans,使用ALT + INSERT).
  • 我希望模型最接近POPO(普通的旧PHP对象).我的意思是:私有属性,每个属性的"硬编码"getter和setter.

我有一个名为AbstractModel所有模型继承的抽象类.它有一个isDirty()名为is_dirty的私有(也可以保护,如果需要)的属性调用的公共方法.它必须返回true或false,具体取决于对象数据是否有更改,因为它已加载.

问题是:有没有办法"is_dirty"在每个setter中编译内部标志而不编码$this->is_dirty = true?我的意思是:$this->attr = $value除了业务逻辑需要更改代码之外,我希望大多数时间都有setter .

其他限制是我不能依赖,__set因为在具体的模型类中,属性已经作为私有存在,因此__set永远不会在setter上调用.

有任何想法吗?其他ORM的代码示例被接受.

我的一个想法是修改NetBeans setters模板,但我认为应该有一种方法可以在不依赖IDE的情况下执行此操作.

我的另一个想法是创建setter,然后用下划线或其他东西更改private属性的名称.这样setter会调用__set并在那里处理一些代码来处理"is_dirty"标志,但是这会破坏POPO概念,而且很难看.

php oop model-view-controller orm

5
推荐指数
1
解决办法
3710
查看次数