使用 ini_set() 的 PSR-1 兼容替代方案是什么?
What is the PSR-1 Compliant Alternative to Using ini_set()?
我正在使我的代码库符合 PSR-2 标准(因此符合 PSR-1 标准),我遇到了以下代码:
public function init()
{
parent::init();
// Allow A Larger PHP Memory Limit For This Script
ini_set("memory_limit", "512M");
// Allow A Larger Script Execution Limit For This Script
ini_set('max_execution_time', 300);
}
用于增加此特定脚本(仅站点管理员可以访问并且 运行 不经常访问)能够消耗的内存量和执行时间。
在 php.ini 中设置默认值 memory_limit
和 max_execution_time
(所有标准 scripts/files 都会遵守),然后在需要时增加这些限制,当然对我来说,感觉像是一个完全可以接受且合乎逻辑的实现。
但是,我记得 PSR-1 指出:
"Files SHOULD either declare symbols (classes, functions, constants, etc.) or cause side-effects (e.g. generate output, change .ini settings, etc.) but SHOULD NOT do both."
然后继续说明使用 ini_set()
是副作用的一个例子(至少他们的例子表明它在 class 或函数的范围之外使用):
<?php
// side effect: change ini settings
ini_set('error_reporting', E_ALL);
这个文档可以看here
因此我的问题是:
- 在 classes 方法(根据我的上下文)中使用 ini_set() 是副作用的一个例子吗?
- 如果是,符合 PSR-1 的替代方案是什么?
这个特定的脚本需要允许更多的内存使用和执行时间,但我不想为此增加全局 php.ini 设置,因为这将允许所有其他 PHP 进程使用他们应该使用的更多内存和执行时间。
PSR-1 只是在谈论文件中的 top-level 代码。该 top-level 代码应该导致副作用或声明一些东西。
在您的示例中,您正在定义 class 及其方法。加载文件时不会发生副作用,它会在您调用函数时发生。为了符合 PSR-1,该调用不应在此文件的 top-level 代码中。
我正在使我的代码库符合 PSR-2 标准(因此符合 PSR-1 标准),我遇到了以下代码:
public function init()
{
parent::init();
// Allow A Larger PHP Memory Limit For This Script
ini_set("memory_limit", "512M");
// Allow A Larger Script Execution Limit For This Script
ini_set('max_execution_time', 300);
}
用于增加此特定脚本(仅站点管理员可以访问并且 运行 不经常访问)能够消耗的内存量和执行时间。
在 php.ini 中设置默认值 memory_limit
和 max_execution_time
(所有标准 scripts/files 都会遵守),然后在需要时增加这些限制,当然对我来说,感觉像是一个完全可以接受且合乎逻辑的实现。
但是,我记得 PSR-1 指出:
"Files SHOULD either declare symbols (classes, functions, constants, etc.) or cause side-effects (e.g. generate output, change .ini settings, etc.) but SHOULD NOT do both."
然后继续说明使用 ini_set()
是副作用的一个例子(至少他们的例子表明它在 class 或函数的范围之外使用):
<?php
// side effect: change ini settings
ini_set('error_reporting', E_ALL);
这个文档可以看here
因此我的问题是:
- 在 classes 方法(根据我的上下文)中使用 ini_set() 是副作用的一个例子吗?
- 如果是,符合 PSR-1 的替代方案是什么?
这个特定的脚本需要允许更多的内存使用和执行时间,但我不想为此增加全局 php.ini 设置,因为这将允许所有其他 PHP 进程使用他们应该使用的更多内存和执行时间。
PSR-1 只是在谈论文件中的 top-level 代码。该 top-level 代码应该导致副作用或声明一些东西。
在您的示例中,您正在定义 class 及其方法。加载文件时不会发生副作用,它会在您调用函数时发生。为了符合 PSR-1,该调用不应在此文件的 top-level 代码中。