【问题标题】:Need some guideline to refactor my php code in OOP concept需要一些指南来在 OOP 概念中重构我的 php 代码
【发布时间】:2013-04-02 22:10:50
【问题描述】:

我写了一个运行良好的 wordpress 插件。然而,它只是工作,但这里没有 OOP,因为当时有必要尽快构建一些东西。看了一些文献,发现由于菱形问题,php不支持多重继承。

当前情景:

Flickr
--pic importer
----1. sql.php
----2. javascript.php
----3. call to show database contents

--photoset importer
----1. sql.php
----2. javascript.php
----3. call to show database contents

在这里,我创建了 2 个类:picImporterphotosetImporter。这两个类共享来自(1. sql.php2. javascript.php)的共同内容,但第 3 点(显示数据库内容的实现对它们来说是不同的)。

所以,我的想法是:我应该创建另一个类GlobalphotosetImporterpicImporter 类应该扩展这个类。在 Global 类中应该有一个子类必须定义的抽象类。于是设计就变成了:

Class Global{
   //$sql comes sql.php,
   //$javacript comes javascript.php,
   abstract protected function showDatabaseContents();
}

Class picImporter extends Global{
    protected function showDatabaseContents() {
        //implementation using **$sql** from base
    }
}

Class photosetImporter extends Global{
    protected function showDatabaseContents() {
        //implementation using **$javascript** from base
    }
}

在我继续之前,我只想知道我是否在正确的轨道上,如果可能的话,进一步指导。

谢谢, -S。

【问题讨论】:

  • 你听说过has-a/is-a关系/依赖注入/可靠原则吗?
  • 没有。你能用一些简单的例子指导我吗?乍一看,维基百科的文章似乎令人生畏,因为我对此一无所知。
  • 刚开始阅读并吸收。除非它已经在您的脑海中并且您处理一个新问题并且这些原则作为解决它的逻辑方法出现在您身上,否则它可能没有意义。
  • 是的,现实世界的场景是学习这一点的最佳方式。

标签: php oop


【解决方案1】:

没有特定的“正确”方式来做您正在寻找的事情(尽管有错误的方式)。如果不了解您的 javascript 类的作用,很难知道我会使用什么方法。

通常,我创建一个全局 DB 抽象类(我假设您的 sql 类是),然后在需要的地方从全局范围访问它。全局范围并不是邪恶的,特别是对于数据库访问之类的事情,这些事情不是您正在创建的任何其他类所固有的,但几乎在任何地方都需要。您的 javascript 类可能也是如此。

也就是说,如果您需要这种抽象来在应用程序中保持一致的设计,那么我认为您在这里所做的没有问题,这似乎是一种合乎逻辑的方法。

如果您正在寻找可能是最佳实践的方法,请搜索“PHP 设计模式”,但总的来说,我使用 PHP 的方法是使其简单易用。这可能意味着使用设计模式,也可能意味着更基本的方法,具体取决于。

【讨论】:

  • Javascrip.php 只是为前端回显一些必要的 JavaScript 功能。现在,我更关心一致性,很高兴在全局范围内思考 sql 连接类还不错:-)
  • 如果你不熟悉设计模式或上面提到的 has-a/is-a 等概念,可以尝试一下子学习和实现这些概念用消防水管喝水,如果你不花时间学会正确地喝水,你可能会做得很差。如果您的应用程序对时间敏感,那么请继续以对您有意义的方式对其进行编码。但是,要么使用这个项目,要么创建另一个项目,当你了解更多关于这些原则时,你可以编写和重写。
  • 四年前我在本科课程中读到了设计模式,但由于缺乏实践而忘记了。我现在将从 ibm.com 的文章中找到的一些基本设计模式开始。然后我将检查在这种情况下实现每个模式的“是/否”......我希望我是对还是错并不重要,或者模式验证产生是/否,但阅读和思考的实践将有助于即将到来天。感谢您的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多