PHP OOP核心框架

标签 php oop class object content-management-system

我只是发布这个问题,所以你们中的一些人可能能够以正确的方式指出我。我正在慢慢熟悉 OOP,开始理解这个概念。我想做一个好的坚实的核心或基础来用作 CMS 后端。它还将使用 MVC。我一直在用http://gilbitron.github.com/PIP/作为 MVC- 基础。

我想不通的是:

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

当我点击项目时应该如何处理? //域/后端/项目/项目/或 //域/后端/项目/列表/

更进一步,一个项目将包含一些图像或画廊: //domain/backend/projects/edit/5/gallery/2

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

主要项目负责人:

class projects {

    function index(){
        // view index
    }

    function edit{
        $project = new Project();
        $projectdata = $project->load(5);
    }
}

单个项目 Controller

class project {

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

    function load($id){
        $this->projectmodel->loadproject($id);
    }
}

项目模型

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

    function __construct(){
        // do stuff
    }

    function loadproject($id){
        return $this->db->query("SELECT * FROM projects where id=" . $id . " LIMIT 1");
    }
}

现在我的问题。如果这个项目有图像,我应该在哪里加载图像类来处理这些图像?我应该将它加载到 project_model 中吗 $this->images = new Images();并在模型中有一个函数

function loadimages($id){
    $this->images->load($id);
}

然后图像会是这样的:

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

    function __construct(){
    }

    function load($id){
        return $this->db->query("SELECT * FROM project_images where id=" . $id . " LIMIT 1");
    }
}

Controller 和模型似乎以这种方式混淆了。然而,从逻辑上讲,项目是一个包含项目信息的容器,项目信息可以是文本、图像,也可能是视频。我将如何从逻辑上进行设置。

最佳答案

原始问题

关于 URL 的第一部分称为:路由或调度。有相当不错article关于它与 Symfony 2.x 的关系,但它背后的想法才是最重要的。此外,您可能会了解其他框架如何实现它。

至于您的原始 URL 示例,图库将存储在数据库中。他们不会吗?他们将拥有一个唯一 ID。这使得 /backend/projects/edit/5/gallery/2 变得毫无意义。相反,您的网址应该更像:

/backend/gallery/5/edit         // edit gallery with ID 5
/backend/project/3              // view project with ID 3
/backend/galleries/project/4    // list galleries filtered by project with ID 4

URL 应该只包含您真正需要的信息。

这也表示有 3 个 Controller :

  1. 单一画廊管理
  2. 单一项目管理
  3. 处理画廊列表

示例 URL 的模式类似于:

/backend(/:controller(/:id|:page)(/:action(/:parameter)))

其中 /backend 部分是必需的,但 controller 是可选的。如果找到 Controller ,则 id(或页面,当您处理列表时)和 action 是可选的。如果找到操作,则附加 parameter 是可选的。如果写成正则表达式,这种结构可以让您处理大部分路由。

OOP 超越类

在开始使用或编写某种 PHP 框架之前,您应该学习如何编写正确的面向对象代码。这并不意味着“知道如何编写类(class)”。它意味着,您必须真正理解什么是面向对象编程、它基于什么原则、人们常犯的错误是什么以及最普遍的误解是什么。以下是一些可能对您有所帮助的讲座:

这应该让您对该主题有一些概述.. 是的,它很多。但是我怀疑您会更喜欢视频而不是书籍。否则,一些阅读 Material :

您会注意到很多资料都与语言无关。这是因为基于类的面向对象语言的理论是相同的。

附言

请注意代码中的 extends 关键字。它的意思是“是一个”。如果 class Oak extends Tree 没问题,因为所有的橡树都是树。但是如果您有 class User extends Database,有人可能会被冒犯。实际上有一个 OOP 原则在谈论它:Liskov substitution principle ..还有一个很short explanation

关于PHP OOP核心框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9846220/

相关文章:

php - 在 php 中将 dd-mm-yyyy 转换为 yyyy-mm-dd

php - 内联MySQL图片展示

Javascript OOP 延迟调用

java - 在类中不使用构造函数可以吗?

PHP 从时间戳中获取上个月的名称

php - 插入的数据不会进入 phpMyAdmin 数据库

matlab - 在 MATLAB 中为依赖属性动态分配 getter

java - 如何确保一个方法只被多个线程调用一次?

c++ - 多重继承类引用

c++ - 错误 LNK2019,原因不明