在PHP的OOP编程中设置类的正确方法是什么?
让我先介绍一下。我正在学习PHP中的OOP。我也研究过设计模式,但还没有完全掌握不同类型的概念。我正处于这样一个阶段,每隔几个月我就会意识到我做事的方式不正确,不得不改变我的风格这太令人沮丧了。因此,我想一劳永逸地找出正确的做事方法。我已尝试全面阅读Stackoverflow的以下主题: ORM在PHP的OOP编程中设置类的正确方法是什么?,php,mysql,database,oop,design-patterns,Php,Mysql,Database,Oop,Design Patterns,让我先介绍一下。我正在学习PHP中的OOP。我也研究过设计模式,但还没有完全掌握不同类型的概念。我正处于这样一个阶段,每隔几个月我就会意识到我做事的方式不正确,不得不改变我的风格这太令人沮丧了。因此,我想一劳永逸地找出正确的做事方法。我已尝试全面阅读Stackoverflow的以下主题: ORM 数据映射器 单身人士 全球化是邪恶的 一切相关的 不过,有几件事我还不清楚。我在这里以一种清晰简洁的方式发布我的代码,希望人们能够指出好的做法和坏的做法。我会在最后列出我所有的问题 请不要重复,我已经诚
数据映射器
单身人士
全球化是邪恶的
一切相关的 不过,有几件事我还不清楚。我在这里以一种清晰简洁的方式发布我的代码,希望人们能够指出好的做法和坏的做法。我会在最后列出我所有的问题 请不要重复,我已经诚实地搜索了这个主题的几乎所有问题,但我仍然想知道一些我无法澄清的事情。对不起,它太长了,但我已经尝试组织它,所以它应该读得很好强> 我将首先发布数据库类的要点 Database.php Question.php 我现在做的很简单。我可以说:
$user = new User(array('username'=>'John Doe'));
echo $user->username; // prints *John Doe*
$user->save(); // saves (or updates) the user into the database.
我可以通过对用户的静态调用检索用户
$user = User::find_by_id(1);
echo $user->username; // prints users name
那么现在我的问题是:
- 1) 这个设计模式叫什么名字(如果它是一个的话)。数据映射器?依赖注入?域模型(不管是什么)?数据访问层
- 2) 目前来看,这个实现是否被认为结构良好
- 3) 如果它是好的,我是否应该注意代码中缺少的命名约定
- 4) 如果它被认为是好的,你介意指出你特别喜欢什么,这样我就知道该保留哪个部分了吗
- 5) 如果你认为这不好,你愿意详细解释一下为什么会这样吗
- 6) 如果我的
,创建
,更新
这些都是我的对象的方法,它们应该与我的删除
,按id查找
属于同一类,它们只是静态调用,实际上返回对象。如果他们应该在两个不同的班级,我该怎么做呢查找所有
- 7) 为什么其他人都在使用
函数和像mappers这样的花哨词汇,而我一次都不需要它们$load->('UserClass')
- 您提出的解决方案称为“”;对于优点和缺点,您可以阅读Martin Fowler的《企业架构模式》一书,以及您可以在internet上找到的许多对话
Fwiw,我个人的观点是,这是构建数据库驱动应用程序的一种非常好的方法,其中主要的业务逻辑是对数据库进行读写;在构建更复杂的业务逻辑时,它往往会变得有点麻烦
此外,堆栈溢出不是针对“请讨论此主题”式的问题,而是针对有客观真实答案的答案。所以,你的问题1是合适的,但其他问题并不适合,所以…这里更合适:@IliaRostovtsev谢谢,我不知道,但我仍然需要专家的回答,我想他们主要在这里!不,不要只是阅读这些主题(我不鼓励使用SO作为主要参考)。获得经验,不要害怕弄脏你的手(这个问题是一个好的开始,tho)。要知道没有黑与白。我不知道上下文,但globals不一定是邪恶的,只是如果被误用就很可怕。对于ORM和Singleton,以及,嗯,所有东西都是一样的——有时它们是好的实践,但并不总是最好的。事实上,你每隔几个月就会意识到自己做错了事情,这本身就是一件好事,这意味着你作为一名程序员正在成长和学习。这是你应该一直努力争取的。这也意味着你正在获得经验并从中学习。@gordonM谢谢你的鼓励,但我更愿意知道一切。我刚才仔细阅读了你的答案。你能帮我解决我的问题吗?谢谢内维尔花时间,我不认为我的问题是讨论这个话题的方式,那么问题3和问题6呢?@InGodITrust也许你应该问上帝=p。好的,我将回答3和6:对于命名约定和名称空间,请阅读,这是目前的标准。关于你的方法,让它们都在同一个类中是可以的。您还应该考虑将DBAL与ORM分开。您应该将连接部分、查询构建部分和实体/关系部分分开。这对学习都有好处,我也做过。“但对于真正的项目,你应该使用经过良好测试的库,如Doctrine2或Symfony2。”ChocoDeveloper我问过他,现在还在等待答复。谢谢你的提示,你提供的链接很棒!
class User extends MainModel{
}
class Question extends MainModel{
}
$user = new User(array('username'=>'John Doe'));
echo $user->username; // prints *John Doe*
$user->save(); // saves (or updates) the user into the database.
$user = User::find_by_id(1);
echo $user->username; // prints users name