PSR-1 включает рекомендацию 2.3. Побочные эффекты :
Файл ДОЛЖЕН объявлять новые символы (классы, функции, константы и т. Д. c.) И не вызывать других побочных эффектов, либо ДОЛЖЕН выполнять logi c с побочными эффектами, но НЕ СЛЕДУЕТ делать и то, и другое.
Рассмотрим этот пример (мой собственный) внутри файла конфигурации. php file:
/**
* Parsing the database URL.
* DATABASE_URL is in the form:
* postgres://user:password@hostname:port/database
* e.g.:
* postgres://u123:pabc@ec2.eu-west-1.compute.amazonaws.com:5432/dxyz
*/
$url = parse_url(getenv('DATABASE_URL'));
define('DB_HOST', $url['host']);
define('DB_NAME', substr($url['path'], 1)); // get rid of initial slash
define('DB_USER', $url['user']);
define('DB_PASSWORD', $url['pass']);
Если я это сделаю это, я фактически не уважаю рекомендацию. phpcs по праву будет жаловаться на это из-за переменной:
FILE: config.php
-----------------------------------------------------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
-----------------------------------------------------------------------------------------------------------------
1 | WARNING | A file should declare new symbols (classes, functions, constants, etc.) and cause no other side
| | effects, or it should execute logic with side effects, but should not do both. The first symbol
| | is defined on line 17 and the first side effect is on line 162.
-----------------------------------------------------------------------------------------------------------------
Альтернативой может быть следующее:
define('DB_HOST', parse_url(getenv('DATABASE_URL'))['host']);
define('DB_NAME', substr(parse_url(getenv('DATABASE_URL'))['path'], 1));
define('DB_USER', parse_url(getenv('DATABASE_URL'))['user']);
define('DB_PASSWORD', parse_url(getenv('DATABASE_URL'))['pass']);
Без переменной, без проблем. Но это ВЛАЖНО и трудно читать.
Я понимаю, что рекомендация именно такая, и в ней говорится "ДОЛЖНО", а не "ДОЛЖНО" Но это все еще меня беспокоит ... Во-первых, всякий раз, когда я проверяю файл, phpcs будет жаловаться на него, но сообщать об этом только один раз в строке, оставляя дверь открытой для добавления дополнительных «побочных эффектов», которых нет в конфигурационном файле.
Я все еще новичок во всей этой PSR.
Я пропустил какой-нибудь умный способ избавиться от переменной, сохраняя при этом что-то читаемое?
Следствие будет : как с этим справляются серьезные проекты, которые настаивают на следующих рекомендациях к письму?