1

继this other question之后。

PSR-1 Guidelines中,第 2.3 节 Side Effects 规则限制include在同一文件中使用和声明函数,例如:

<?php
// side effect: loads a file
include "file.php";

// declaration
function foo()
{
    // function body
}

但是你可以include在函数中创建一个文件吗?

例如

<?php
// declaration
function foo()
{
    // side effect: loads a file
    include "file.php";
}
4

2 回答 2

7

关于这条规则要理解的是声明执行之间的区别。您也可以将其视为代码的加载与代码的执行。当您加载代码时,您不希望它立即执行任何操作。例如:

require_once 'utility_functions.php';

您包含此文件是因为您想使用该文件中的某些实用程序功能。您需要包含此文件才能使用其中的任何功能,您不能不包含该文件。但是,如果该文件发生故障并产生一些副作用,只要您包含它,您就已经陷入了一个深深的兔子洞。例如,假设该文件总是更改您的错误报告设置。那会很烦人。每次包含此文件时,您总是必须重置错误报告:

require_once 'utility_functions.php';
error_reporting(E_ALL);
ini_set('error_display', false);

这显然是疯狂的,也是潜在问题的根源。

另一方面,一旦你执行代码,你期望代码执行会做一些事情,甚至可能会产生副作用。并且您可以控制代码执行,这与文件所做的任何事情不同,只需包含文件即可。

require_once 'utility_functions.php';

utility_do_something(); // side effects here are OK and/or expected
于 2014-09-26T12:38:25.187 回答
0

是的,您可以在函数中使用 include。

就这条规则而言,只要在函数内部,您就可以做任何您想做的事情。简单地执行或包含声明函数的文件不会运行函数内的代码。只有在其他文件中调用该函数时,该函数才会运行。

规则中提到包含只是因为它有可能引起副作用。这与 echo、sleep 或任何其他在运行时具有可观察效果的代码段没有什么不同。

于 2018-05-18T20:29:07.587 回答