在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";
}
答案 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或任何其他在运行时具有可观察效果的代码没有什么不同。