Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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 带有require和function调用的内联代码_Php - Fatal编程技术网

Php 带有require和function调用的内联代码

Php 带有require和function调用的内联代码,php,Php,我想知道我是否应该为一个特定的问题编写一个函数(例如,function specific()),或者我是否应该将这段代码放入一个php脚本中,并在需要时调用require'specific.php' 我所说的具体问题是处理通过POST请求的已填写表单,然后重定向浏览器,因为PRG(POST/Redirect/Get)模式(其中包括,exit将被调用,并且在require函数调用后代码不会继续)。处理请求的代码需要两个脚本。考虑下面的代码: somePage.php require 'proces

我想知道我是否应该为一个特定的问题编写一个函数(例如,
function specific()
),或者我是否应该将这段代码放入一个php脚本中,并在需要时调用
require'specific.php'

我所说的具体问题是处理通过POST请求的已填写表单,然后重定向浏览器,因为PRG(POST/Redirect/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
}
您是选择功能还是需要变量(以及原因)?

变量2。为什么?

  • 这就是功能的全部目的
  • 函数可以有参数和返回值
  • 函数有自己的作用域,因此它不能干扰调用方作用域

使用
require
在当前位置插入任意代码块是一种不好的黑客行为(尽管并不少见)。我总是喜欢将代码保存在函数中


对于C,您可以找到类似的讨论(
#include
任意代码段与函数),它们的论点几乎相同,共识也同样明确。

使用include通常只有几个原因:

1) 您有一个通用多用途代码片段,可以在多个页面上使用


2) 出于组织目的,您希望将代码的某些部分抽象为一种类似于“库”的容器/目录。

我很少直接使用include/require。我的大部分工作都是通过类完成的,我使用自动加载来加载它。我个人会使用变体2,因为您遇到了这个问题

$var = "test";
include "test.php";
$var = "test2";
include "test".php";
如果您在其中定义了一个函数(例如用于排序),可能会导致错误。你会得到一份重复的声明。如果它是一个函数()


只要不在该函数中定义函数,就可以了。

出于几个原因,我倾向于使用该函数,其中一个主要原因是变量的作用域

想象一下使用“require”的情况,然后在某个地方编辑所需的代码,以包含一个与代码中其他地方的变量冲突的新变量


假设您使用一个快速的小型通用变量,如$x或$i,您可能会创建间歇性的噩梦般的bug,这将是一个真正令人头痛的问题。

此代码应该放在函数或方法中,以便它可以有自己的变量范围,而不是使全局名称空间变得模糊。然而,我更希望它是在一个类的方法中进行的。通过这种方式,我可以使用类自动加载程序仅在实际使用时加载包含的代码,并进一步清除全局命名空间


include和require还实际返回值(这不应使参数变小)。
include "test.php";
outputTest("test");
outputTest("test2");