Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/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
如何组织PHP代码?_Php - Fatal编程技术网

如何组织PHP代码?

如何组织PHP代码?,php,Php,我正在以模块化的方式编写一个应用程序,所以我可以重用一些组件。我还编写了在不同组件之间共享的实用程序函数。例如,如果我有A类(在A.php中)、B类(在B.php中)、C类(在C.php中)和函数f(在utils.php中),并且这个函数在A、B和C中都使用,那么如何组织代码 出于测试的目的,我分别运行A.php、B.php和C.php,因此我需要在它们中包括utils.php。在所有三个文件中使用一次'utils.php'是一个好的解决方案吗?我听说使用require_一次可能会有一个小的性能

我正在以模块化的方式编写一个应用程序,所以我可以重用一些组件。我还编写了在不同组件之间共享的实用程序函数。例如,如果我有A类(在A.php中)、B类(在B.php中)、C类(在C.php中)和函数f(在utils.php中),并且这个函数在A、B和C中都使用,那么如何组织代码


出于测试的目的,我分别运行A.php、B.php和C.php,因此我需要在它们中包括utils.php。在所有三个文件中使用一次'utils.php'是一个好的解决方案吗?我听说使用require_一次可能会有一个小的性能问题。或者我是否应该单独编写一个“test.php”,导入我需要的所有文件,并使用该代码进行测试,而不是在实际的类文件中编写测试?

如果您正在编写面向对象的程序,您还应该将函数f放入一个类中;utils.php文件中的utils类

require_once可能对性能影响很小,因为它必须记住并检查文件是否已包含在内,但这是包含文件的最佳方式,以确保您拥有所需的文件。然后可以包含该文件/类的所有依赖项


测试当然不应该在类文件中。我不太清楚您的所有课程是现在进行测试还是正在测试您的课程……

关于要求一次:

是的,它有一些性能问题。当您确定只包含一次文件时,不要将其放入,这是不必要的检查

一些建议:

  • 调用require时尝试使用绝对路径
  • require_once()与require()之间的时间差通常没有那么大,但有数百个require*()调用的非常大的应用程序除外,在这种情况下,速度确实很慢
  • 使用操作码缓存,比如APC
首先,
require\u once
运行测试肯定不会“太”慢。记住,过早优化是万恶之源。是的,它有一些开销,但除非它会导致错误或减慢您的生产环境,否则不要麻烦。量,量

我倾向于使用的一个好策略类似于Zend框架

我的类名基于我的目录结构。例如,名为Http_Client_Curl的类将放在以下目录中:

Http/Client/Curl.php

这样的结构,使用起来非常方便。看见这意味着您可以根据一个非常简单的约定,让PHP自动包含您需要的所有文件和类。

如果您使用的是PHP5.3,我相信它会非常适合您的应用程序。另一方面,遗留代码倾向于组织到“库”或“包含”中,核心是“includes.inc.php”,它使用工厂方法或各种其他方法来加载类

相关:您需要将您的UTIL包含到一些引导文件中,比如一个带有db设置的文件。另外请注意,对于那些无法控制程序的人来说,require_once操作符(以及其他_once内容)是一个难看的拐杖flow@Col.弹片:我有一个引导文件,可以把组件粘在一起。但是当我测试单个类时,引导并没有运行。这是怎么回事?那你在测试什么?创建一个包含bootstrapYes的测试环境,我正在测试我的类。我通常有一行if-defined('STDIN'),并在if块中使用assert()编写测试代码。在引导代码中,我定义了一个$BASEPATH变量,该变量包含bootstrap.php的dir名称,它位于项目根目录中并始终运行您永远不知道会发生什么,也不知道其他人会如何处理您的代码。