带有require与函数调用的内联代码


Inline code with require vs. function call

我想知道我是否应该为特定问题(例如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