为了账号安全,请及时绑定邮箱和手机立即绑定

PHP OOP核心框架

PHP OOP核心框架

PHP
天涯尽头无女友 2019-11-27 12:51:54
我只是发布这个问题,以便你们中的一些人能够以正确的方式指出我。我正在慢慢地热衷于面向对象编程,开始理解这个概念。我想成为一个良好的坚实核心或基础,以用作CMS后端。它还将使用MVC。我一直在使用http://gilbitron.github.com/PIP/作为MVC-base。我不知道的是以下内容:说,在后端的projectpage上,我有两个部分:htmltext和projects,我应该都可以对其进行编辑。uri将类似于:// domain / backend / projects(方法将是索引并显示2个部分)当我单击项目时,应该如何处理?// domain / backend / projects / projects /或// domain / backend / projects / list /更进一步,一个项目将保存一些图像或画廊:// domain / backend / projects / edit / 5 / gallery / 2首先,我的问题是:这将是一个好方法吗,更重要的是,如何在OOP中实施主要项目负责人:class projects {    function index(){        // view index    }    function edit{        $project = new Project();        $projectdata = $project->load(5);    }}单个项目负责人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");    }}现在我的问题。如果该项目有图像,我应该在哪里加载图像类来处理这些图像?我应该像$ this-> images = new Images();一样将其加载到project_model中吗?并在模型内部具有功能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");    }}似乎控制器和模型以这种方式混杂在一起。从逻辑上讲,项目是一个容纳projectinfo的容器,它可以是文本,图像甚至是视频。我将如何在逻辑上进行设置。
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

如果该项目有图像,我应该在哪里加载图像类来处理这些图像?我应该像$ this-> images = new Images();一样将其加载到project_model中吗?并在模型内部具有功能


是。该模型的目标是封装业务逻辑,以便您只需要编写一次算法,然后多次共享它们。如果您是我,该怎么做,就是将一个getImages()方法添加到Project模型中,因为图像是项目的直接属性,这使得每个项目都知道如何检索自己的图像。


与我使用过的(水合和对等/表)类相比,您的代码缺少一些关键概念,因此我将尽量坚持使用您的代码。您可以通过Project对象检索图像,然后通过2种视图1引用图像:


// Controller

$this->project = new Project();

$this->projectImages = $project->getImages(); // Implemenation #2


// View


// Implemenation #1 (reference to object initialized in controller)

<?php foreach ($project->getImages() as $image): ?>

<img src="<?php echo $image['path'] ?>" />

<?php endforeach ?>


// Implemenation #2 (reference to separate variable initialized in controller)

<?php foreach ($projectImages as $image): ?>

<img src="<?php echo $image['path'] ?>" />

<?php endforeach ?>

以上仅是说明性的,但应给您一个想法。我建议你看看《主义》。它是一种经过验证且稳定的ORM,可提供您尝试编写的大部分内容,并且还添加了我之前提到的缺少的组件。水化,对象关系和Table类,以及许多其他功能(例如嵌套集)。


查看完整回答
反对 回复 2019-11-27
?
米脂

TA贡献1836条经验 获得超3个赞

projects.php 此控制器扩展了项目控制器。主要目的是使用自己的模型处理多个getAllProjects(),然后将其传递给项目控制器getProject()


class Projects extends Project{


public function __construct()

{

    parent::__construct();

    $this->projects_model = new Projects_model();

}       


public function getAllProjects()

{

    $res = $this->projects_model->getAllProjects();     

    if($res) foreach($res as $v) $projects[] = $this->getProject($v);


    return $projects;

}

}

project.php

project_model除了获取项目数据和相关数据(如图像)外无非


class Project{


public function __construct()

{

    $this->project_model = new Project_model;

    $this->images = new Images();

}



public function getProject($data=NULL)

{

    if($data==NULL) $data = $this->project_model->loadProject($data['id']);

    $images = $this->project_model->loadProjectImages($data['id']);


    return array('project_id' => $data, 'project' => $data, 'images' => $images);

}   



public function getProjectByID($id)

{

    $data = $this->project_model->loadProject($id);

    return getProject($data);

}   


}

这种方法的好处是,我可以单独使用项目类,它将起作用。我可以将其封装在项目中,也可以使用它。


这是做事的好方法(正确)吗?还是将所有这些整合到一个控制器和一个模型类中会更好?


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 439 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信