PSR-1 2.3 Пример правила побочных эффектов

Исходя из этого другой вопрос.

в Руководство PSR-1, раздел 2.3 Правило побочных эффектов ограничивает использование 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";
}

1

Решение

В этом правиле нужно понимать разницу между декларация а также выполнение. Вы также можете думать об этом как погрузка кода против выполнение кода. Когда ты нагрузка код, вы не ожидаете, что это делать ничего пока что. Например.:

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
4

Другие решения

Да, вы можете использовать include внутри функции.

Что касается этого правила, вы можете делать все, что захотите, пока находитесь внутри функции. Простое выполнение или включение файла, который объявляет функцию, не запускает код внутри функции. Функция будет работать только в том случае, если есть вызов в каком-то другом файле.

Включение упоминается в правиле только потому, что оно может вызвать побочные эффекты. Это ничем не отличается от echo, sleep или любого другого фрагмента кода, который имеет заметный эффект при запуске.

0

По вопросам рекламы [email protected]