使用OOP和Classes时的PHP文件结构

时间:2014-01-08 13:45:15

标签: php oop

我正在尝试在PHP中建立我的OOP知识。我读过的每个建议都说“所有php类都应该存储在一个单独的文件中,而不是index.php文件”。一个人甚至说

“你永远不会直接在你的主要php页面中创建你的PHP类 - 这首先会破坏面向对象PHP的目的之一!”

我正试图找出原因。

据我所知,在单个文件中浏览多行代码并不符合每个人的口味。但是,我总是希望尽可能将所有函数加载到同一文件的不同部分。我之前没有发现任何与之相关的问题所以我不确定为什么惯例是将所有功能都保存在其他地方。

我的问题是:这只是一个约定,还是在使用OOP时以这种方式组织文件还有另一个特定的好处?

这个问题的出现是因为我构建了一个基于功能的(但不是基于类 - 我正在学习的)项目,其中包含超过150k行的代码,这些代码使用了php库和db连接文件,但没有别的。该项目包括我用来模板/构建新项目的各种模块,我很喜欢它。我想用最新的标准来更新它,但除非有重组文件的真正好处,否则我不确定它是否值得。

1 个答案:

答案 0 :(得分:2)

将文件拆分为逻辑单元(在OOP中每个文件只有一个类)的一个主要好处是允许组件代码在另一个上下文中重用,而不必“拉”不必要的代码。

假设您已编写了一个令人惊叹的应用程序,它可以从数据库中加载内容,对数据进行一些巧妙的转换,然后在表格中显示。你确实可以把所有东西写在一个文件中,这样就可以了;你甚至可以在渲染页面中写下所有内容。

但是如果你需要另一个页面将一个数组转换成一个html表,并且你意识到你已经编写了一个函数(或一个对象)在第一个例子中执行完全相同的操作(在'display table'位中),你显然想要“重用”这个函数/对象。

显而易见的方法是“要求”包含您要重用的代码的文件。不幸的是,因为当您需要代码将数组转换为表时,您在一个页面中编写了所有内容,代码将从数据库加载内容开始 - 您根本不需要。您只对表生成位感兴趣。

其次,您可以将函数/对象复制/粘贴到新文件中。这是最糟糕的解决方案,如果您稍后发现表转换函数中的错误,则必须修复BOTH文件。您可能忘记更新另一个。

第三,你可以将所需的代码提取到一个新文件中,并使两个需要使用它的“页面”“需要”它。

第四种解决方案是将每个类写在自己的文件中;这不会造成伤害,并且比在需要时提取代码要简单得多。

这是第一个主要的好处。除此之外,它允许您(正如其他人所说)使用自动加载 - 并使代码导航更容易。最后,如果A类存在问题,我知道我可以在文件'a'中找到它,而无需浏览所有文件。