PSR-1 2.3副作用规则示例

时间:2014-09-26 12:12:01

标签: php standards psr-1

继续other question

PSR-1 Guidelines中,第2.3节“副作用”规则限制使用include并在同一文件中声明函数,例如:

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

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

但你可以include一个函数内的文件吗?

e.g。

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

2 个答案:

答案 0 :(得分:5)

要了解此规则的事项是声明执行之间的区别。您也可以将其视为加载代码与执行代码。当您加载代码时,您不希望它任何事情。 E.g:

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

答案 1 :(得分:0)

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

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

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