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
需要一些指南来重构OOP概念中的php代码吗_Php_Oop - Fatal编程技术网

需要一些指南来重构OOP概念中的php代码吗

需要一些指南来重构OOP概念中的php代码吗,php,oop,Php,Oop,我写了一个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 ----

我写了一个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
在这里,我创建了两个类:
picImporter
photosetImporter
。这两个类共享(
1.sql.php
2.javascript.php
)中的公共内容,但第3点(显示数据库内容的实现对于它们来说是不同的)

所以,我的想法是:我应该创建另一个类
Global
photosetImporter
picImporter
类应该扩展这个类。在全局类中,应该有一个子类必须定义的抽象类。因此,设计变成:

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
    }
}
在我继续之前,我只想知道我是否在正确的轨道上,如果可能的话,还有进一步的指导

谢谢, -美国

没有特别的“正确”方法来做你想要的事情(尽管有错误的方法)。如果不了解javascript类的功能,很难知道我会使用什么方法

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

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


如果您正在寻找最佳实践,可以搜索“PHP设计模式”,但一般来说,我使用PHP的方法是保持它的简单性和可访问性。这可能意味着使用设计模式,也可能意味着更基本的方法,这取决于。

你听说过
has-a/is-a
关系/依赖注入/可靠原则吗?不。你能用一些简单的例子来指导我吗?维基百科上的文章乍一看似乎让人望而生畏,因为我对此一无所知。只要先阅读并吸收。这可能是没有意义的,直到它已经出现在你的脑海中,你着手解决一个新问题,这些原则作为解决问题的逻辑方法出现在你的脑海中。是的,现实世界的场景是学习这个的最佳方式。Javascrip.php只是为前端提供一些必要的javascript功能。现在,我更关心的是一致性,并且很高兴在全局范围内思考sql连接类还不错:-)如果您不熟悉设计模式或上述has-a/is-a和其他概念,那么尝试同时学习和实现这些概念就像从消防水管喝水一样,如果你不花时间去学习正确的方法,你很可能会做得很差。如果您的应用程序是时间敏感的,那么继续以对您有意义的方式对其进行编码。但是,要么使用这个项目,要么创建另一个项目,当你了解更多这些原则时,你可以写一写再写。4年前,我在我的本科课程中读到了设计模式,但由于缺乏实践,我忘记了。现在我将从ibm.com文章中的一些基本设计模式开始。然后,我将检查“是/否”以实现本例中的每个模式……我希望我是对还是错都不重要,或者模式验证会产生“是/否”,但阅读和思考的实践将在未来几天有所帮助。谢谢你的评论。