【问题标题】:Design Tips for PHP Function Include FilesPHP 函数包含文件的设计技巧
【发布时间】:2010-10-10 19:06:21
【问题描述】:
好的设计要求每个函数只写一次。在 PHP 中,我通过使用包含文件(如 Utils.php 和 Authenticate.php)和 PHP 命令 include_once 来执行此操作。但是,我无法找到 PHP 包含文件的任何标准或最佳实践。你在 StackOverflow 有什么建议?
我正在寻找:
- 命名标准
- 代码标准
- 设计模式
- 关于定义常用函数返回类型的建议
(现在我只使用关联数组)。
【问题讨论】:
标签:
php
include
server-side-includes
【解决方案1】:
我喜欢使用的一个约定是将每个类放在自己的名为 ClassName.class.php 的文件中,然后设置 autoloader 以包含类文件。或者有时我会将它们全部放在一个类/子目录中,然后将它们命名为 ClassName.php。取决于我期望有多少类与非类包含。
如果您将实用程序函数组织到类中并改为将它们设为静态方法,则您可以在顶级文件中只编写一个 require_once()。这种方法可能适合也可能不适合您的代码或编码风格。
至于返回类型,我尝试遵循内置函数中使用的约定。返回适合请求的类型,或在失败时返回 false。只需确保在结果中检查 false 时使用=== operator。
您关注惯例这一事实表明您已经走在正确的轨道上。如果您熟悉任何其他 OOP 语言,如 Java、C++、C# 等,那么您会发现由于OOP goodness in PHP5,您可以遵循许多相同的约定。
【解决方案2】:
无论您最终使用何种命名约定(我更喜欢尽可能从 Java 或 C# 中获取线索),请确保您是否对函数使用包含文件,这些函数在包含时不会实际执行任何代码,并且从不包含同一个文件两次。 (使用include-once 或require-once)
【解决方案4】:
我做了以下事情。首先,我创建了一个拦截过滤器,为了拦截所有 Web 请求,我还创建了一个可以使用命令行命令的版本。
两个拦截器都将转到一个引导文件,该文件将设置一个自动加载器。这个文件作为自动加载函数和一个哈希。对于散列,键是类名,值是类文件的文件路径。自动加载函数将简单地获取类名并对文件运行要求。
如果您需要一些性能提示,请在定义文件时使用单引号,因为它们不会被解释,因此速度会稍快一些,还可以使用 require/include,而不是它们的 _once 版本,这样可以保证运行一次,前者要快一些。
上面的内容很棒,事实上,即使有一个包含大量类的大型代码库,散列也没有那么大,性能从来都不是问题。更重要的是,我们并没有接受一些疯狂的伪名称空间类命名约定,见下文。
另一个选项是分隔名称,伪名称空间技巧。这不那么有吸引力,因为名称空间将随 5.3 一起提供,我认为这很恶心,因为在代码库中重命名这些名称空间将不那么有趣。无论如何,这就是它的工作原理,假设您的所有代码都有根。然后所有类都根据到达那里所需的目录遍历来命名,用字符分隔,例如'_',然后是类名本身,但是文件将以类命名。这样类的位置在名称中进行编码,自动加载器可以使用它。除了 real_long_crazy_class_names_MyClass 之外,这个方法的问题是每次调用都有相当多的处理,但这可能是过早的优化,并且名称空间又来了。
例如。
/code root
ClassA ClassA.php
/subfolder
subFolder_ClassB ClassB.php