Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在处理表联接时,如何有效地编写对象类?_Php_Oop_Class - Fatal编程技术网

Php 在处理表联接时,如何有效地编写对象类?

Php 在处理表联接时,如何有效地编写对象类?,php,oop,class,Php,Oop,Class,首先,我应该说我现在不是,我也没有任何幻想我会成为一名专业程序员,所以我的大部分技能都是从经验中学来的,这在很大程度上是一种爱好 我学习了PHP,因为它在某些领域似乎是一个很好的简单介绍,它允许我设计简单的web应用程序 当我学习对象、类等时,导师的基本示例介绍了这样一个想法,即作为经验法则,每个数据库表都应该有自己的类。虽然这在我们编写的照片库项目中效果很好,因为它有非常简单的mysql查询,但现在我的项目变得越来越复杂,效果也不太好。如果我需要来自两个单独的表的数据,而这两个表需要一个表联接

首先,我应该说我现在不是,我也没有任何幻想我会成为一名专业程序员,所以我的大部分技能都是从经验中学来的,这在很大程度上是一种爱好

我学习了PHP,因为它在某些领域似乎是一个很好的简单介绍,它允许我设计简单的web应用程序

当我学习对象、类等时,导师的基本示例介绍了这样一个想法,即作为经验法则,每个数据库表都应该有自己的类。虽然这在我们编写的照片库项目中效果很好,因为它有非常简单的mysql查询,但现在我的项目变得越来越复杂,效果也不太好。如果我需要来自两个单独的表的数据,而这两个表需要一个表联接,那么我就会完全忽略这个类并逐个处理它,或者更糟糕的是,将一些数据合并到这个类中,其余的作为一个单独的实体并进行两次查询,这对我来说似乎效率低下

例如,在我编写的论坛上查看内容时,如果您查看一个线程,我将从threads表、posts表和user表中检索数据。来自user和posts表的查询是通过连接检索的,而不是实例化为对象,而线程数据是使用MyThreads类调用的

那么,我如何才能从我目前的状况中,找到一个不那么“愚蠢”的词,因为我缺少一个更好的词。现在我有一个处理连接和转义值等的DB类,一个处理常见查询和方法的父DB查询类,所有其他类(线程、上载、会话、照片和未使用的Post、用户等)都是该类的子类

我是否创建了一个大的posts类,该类具有我从users(可能还有threads)表中检索到的相关额外属性?
我是否有单独的类,用一个查询填充每个相关属性?如果是,我该怎么做?
由于我的类的编写方式,根据我所学的内容,我的db update row方法或insert方法都只是将属性作为数组进行更新,如果我在每个类中都有来自其他db表的额外属性,那么我如何重写这些方法,因为很明显自动更新会导致错误

简言之,我认为我现在的理解是有限的,当涉及到如何编写更复杂的类的基础知识时,我想要一些指导

编辑:


谢谢你的回答,到目前为止,他们给了我很多建议和想法,还有很多阅读材料。不过,我想知道的是,不同的人是如何决定使用任意数量的类处理简单的表联接的?您是否向类添加了属性?从类外进行查询,然后将结果传递到每个类?还有别的吗

您的许多担忧可以通过检查在经过良好测试的框架(如、和)中找到的现有解决方案来解决。检查他们的方法和偷看引擎盖下应该有助于了解你的问题。谁知道呢?您甚至可以决定使用它们编写未来的项目

他们花了数年时间集思广益来解决这些问题。好好利用

结帐

下面是一个使用条令的论坛应用程序示例


这太宽泛了,如果不深入到史诗般的长度,就无法回答

基本上,有四种突出的数据源体系结构模式:和。这些都可以在一些变体中以公共方式实现。这些都很容易掌握和实施

当您开始处理应用程序中的数据库和业务对象之间的冲突时,就会遇到困难。为此,有许多对象关系行为、结构和元数据映射模式,如身份映射、延迟加载、查询对象、存储库等。对这些模式的解释超出了范围。它们在PoEAA中覆盖了近200页


您可以看到的是or(两种最为人熟知的模式),它们实现了这些模式中的大多数模式,您可以在应用程序中使用它们来替换当前的数据库访问处理。

关于如何设计一组类以适应数据库模式的整本书都已经写好了

长话短说:没有一刀切的方法可以做到这一点,您必须在每个应用程序的基础上做出大量的设计决策,以权衡您想要做的事情

您可以找到一个库或框架来提供帮助,关键字:ActiveRecord、ORM(对象关系映射器)

顺便说一句,你不知道你可能陷入一种扼杀灵魂的分析瘫痪和过度设计。做最简单的事情,可以为您的应用程序工作

我(以下)评论的代码示例:


你一定要到处走动我一直在研究这些,我当然对调查使用框架能带来什么感兴趣,但我没有考虑过用它们来回答我的问题,所以我会继续跟进。现在我想我是在寻找一个更好的想法,不是什么是“规范”,而是什么是不同的人认为可以接受的。例如,可以接受一个Post类,它具有中users表中的3个属性吗?我很感激有很多方法可以写这些课程,正是这种多样性让我头疼。目前,我一直在使用最简单有效的东西,不幸的是,它不雅观,我一直在努力改进我的写作。谢谢你的关键词,这和其他答案一起给了我很多阅读材料。的确,这是一个广泛的问题,但是在问这个问题时,我得到了一些有用的提示,即使不是我问题的直接答案。我开始从这个网站上的人们那里了解到这一点,他们给我指出了正确的方向,而不是告诉我该做什么,然后让我去学习。令人惊叹的。当涉及到你的答案时,t
$post = new PublishedPost($data);
$edit = $post->setTitle($newTitle);
$edit->save();