在PHP的OOP编程中设置类的正确方法是什么?

在PHP的OOP编程中设置类的正确方法是什么?,php,mysql,database,oop,design-patterns,Php,Mysql,Database,Oop,Design Patterns,让我先介绍一下。我正在学习PHP中的OOP。我也研究过设计模式,但还没有完全掌握不同类型的概念。我正处于这样一个阶段,每隔几个月我就会意识到我做事的方式不正确,不得不改变我的风格这太令人沮丧了。因此,我想一劳永逸地找出正确的做事方法。我已尝试全面阅读Stackoverflow的以下主题: ORM 数据映射器 单身人士 全球化是邪恶的 一切相关的 不过,有几件事我还不清楚。我在这里以一种清晰简洁的方式发布我的代码,希望人们能够指出好的做法和坏的做法。我会在最后列出我所有的问题 请不要重复,我已经诚

让我先介绍一下。我正在学习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) 为什么其他人都在使用
    $load->('UserClass')
    函数和像mappers这样的花哨词汇,而我一次都不需要它们


    • 您提出的解决方案称为“”;对于优点和缺点,您可以阅读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