什么是使用ini_set()的PSR-1兼容替代方案?

时间:2017-02-07 10:38:44

标签: php ini side-effects ini-set psr-1

我正在使我的代码库符合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_limitmax_execution_time(将受到所有标准脚本/文件的尊重),然后在需要时增加这些限制,当然感觉是完全可以接受的逻辑实施给我。

但是,我记得PSR-1声明:

"文件应该声明符号(类,函数,常量等)或引起副作用(例如生成输出,更改.ini设置等),但不应该同时执行这两种操作。"

然后继续说明使用ini_set()是一个副作用的例子(至少他们的例子显示它在类或函数的范围之外使用):

<?php
// side effect: change ini settings
ini_set('error_reporting', E_ALL);

可以看到此文档here

我的问题是:

  1. 在一个类方法中使用ini_set()(根据我的上下文)是一个副作用的例子吗?
  2. 如果是这样,PSR-1兼容的替代方案是什么?
  3. 这个特殊的脚本需要允许更大的内存使用和执行时间,但我不想只为此增加全局php.ini设置,因为这将允许所有其他PHP进程使用更多的内存和执行时间他们应该。

1 个答案:

答案 0 :(得分:3)

PSR-1正在谈论文件中的顶级代码。该顶级代码应该导致副作用或声明事物。

在您的示例中,您将定义一个类及其方法。加载文件时不会发生副作用,当您调用该函数时会发生这种情况。要符合PSR-1,该调用不应该在此文件的顶级代码中。