【问题标题】:What is the PSR-1 Compliant Alternative to Using ini_set()?使用 ini_set() 的 PSR-1 兼容替代方案是什么?
【发布时间】:2017-06-24 13:36:17
【问题描述】:

我正在使我的代码库符合 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 的替代方案是什么?

需要允许这个特定的脚本使用更多的内存和执行时间,但我不想仅仅为此增加全局 php.ini 设置,因为这将允许所有其他 PHP 进程使用更多的内存和执行时间他们应该。

【问题讨论】:

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


    【解决方案1】:

    PSR-1 只是在谈论文件中的顶级代码。该顶级代码应该会导致副作用或声明内容。

    在您的示例中,您正在定义一个类及其方法。加载文件时不会发生副作用,它会在您调用函数时发生。为了符合 PSR-1,该调用不应位于此文件的顶级代码中。

    【讨论】:

    • 只是为了澄清,你是说我对 ini_set() 的调用是在一个方法中,在一个类中,它们不会导致任何“副作用”,因此我的代码已经符合 PSR-1 标准?
    • 它们当然会产生副作用,这就是重点。但是副作用发生在调用方法时,而不是在加载文件时。
    猜你喜欢
    • 2019-08-08
    • 2016-04-04
    • 1970-01-01
    • 2021-11-13
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多