我想知道我是否应该为特定问题(例如function specific()
(编写一个函数,或者我是否应该将这段代码放入一个php脚本中,并在需要时调用require 'specific.php'
?
我所说的具体问题是处理通过POST请求的已填写表单,然后由于PRG(POST/Rerect/Get(模式(包括exit
将被调用,并且代码在require
函数调用后不会继续(而重定向浏览器。处理请求的代码需要两个脚本。考虑以下代码:
somePage.php
require 'process_form_fnc.php'; // for Variant 2
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// process filled form
require 'process_form.php'; // Variant 1
process_form_fnc(); // or Variant 2
}
你会选择函数还是require变体(以及为什么(?
使用require
在当前位置插入任意代码块是一种糟糕的黑客行为(尽管并不罕见(。我总是喜欢把代码放在函数中。
对于C(#include
任意代码段与函数(,您可以找到类似的讨论,其中有几乎相同的论点和同样明确的共识。
变体2。为什么?
- 这就是函数的全部目的
- 函数可以有个参数和一个返回值
- 函数有自己的作用域,因此不能干扰调用方的作用域
includes的使用通常只应出于以下几个原因:
1( 您有一个通用或多用途代码片段,您可以在多页上使用
2( 出于组织目的,您希望将代码的某些部分抽象到类似"库"的容器/目录中。
我很少直接使用include/request。我的大部分工作都是用类完成的,我使用__AUTOLOAD来加载它。就我个人而言,我会使用变体2,因为你会遇到这个问题
$var = "test";
include "test.php";
$var = "test2";
include "test".php";
如果您在其中定义了一个函数,例如出于排序目的,则可能会导致错误。你会得到一份重复的申报单。如果是函数((
include "test.php";
outputTest("test");
outputTest("test2");
只要你没有在这个函数中定义一个函数,你就应该没事。
出于几个原因,我更喜欢这个函数,其中一个主要原因是变量的作用域。
想象一下这样的情况:您使用"require",然后在某个地方编辑所需的代码,以包含一个与代码中其他地方的变量冲突的新变量。
想象一下,你使用一个像$x或$i这样的快速通用变量,你可以创建间歇性的噩梦般的bug,这将是一个真正令人头疼的问题。
此代码应该放在函数或方法中,这样它就可以有自己的变量作用域,而不会使全局命名空间变得模糊。然而,我更希望它以类的方法进行。通过这种方式,我可以使用类自动加载器只在实际使用时加载包含的代码,并进一步清除全局命名空间。
http://php.net/manual/en/language.oop5.autoload.php