PSR-1 2.3副作用规则示例

icc*_*c97 1 php standards psr-1

接下来是另一个问题

在《PSR-1指南》中,第2.3节“副作用”规则限制include了在同一文件中使用和声明函数,例如:

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

// declaration
function foo()
{
    // function body
}
Run Code Online (Sandbox Code Playgroud)

但是您可以include在函数内添加文件吗?

例如

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

dec*_*eze 5

关于该规则要了解的是声明执行之间的区别。您也可以将其视为代码加载与代码执行之间的对比。当你加载代码,你不要指望它任何事情,只是还没有。例如:

require_once 'utility_functions.php';
Run Code Online (Sandbox Code Playgroud)

包含此文件是因为您要使用该文件中的某些实用程序功能。您需要包含此文件才能使用其中的任何功能,但不能包含该文件。但是,如果该文件崩溃并产生一些副作用,仅将其包括在内,您就陷入了一个深坑。例如,假设文件始终更改了错误报告设置。那会很烦人。每次添加此文件时,您总是必须重置错误报告:

require_once 'utility_functions.php';
error_reporting(E_ALL);
ini_set('error_display', false);
Run Code Online (Sandbox Code Playgroud)

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

另一方面,执行代码后,您希望代码执行可以做一些事情,甚至可能产生副作用。而且,您可以控制代码执行,而与文件所做的任何操作不同,只需将其包含在内即可。

require_once 'utility_functions.php';

utility_do_something(); // side effects here are OK and/or expected
Run Code Online (Sandbox Code Playgroud)