设置PHP的NumberFormatter属性的全局默认值

时间:2017-07-24 08:23:50

标签: php

我使用PHP的NumberFormatter类来显示一些十进制数字。我想设置一些全局默认值 - 全局意味着它在每个创建的NumberFormatter::MAX_FRACTION_DIGITS个实例上设置 - 对于它的属性,这样我就不必每次都设置它们。 (我知道这可以通过重用相同的实例并将其注入不同的类来实现,但是由于某些限制,我不能这样做)。 具体来说,我想为{{1}}属性设置全局默认值。我该怎么做?

1 个答案:

答案 0 :(得分:1)

显然,班级NumberFormatter没有提供任何方法来设置一些全局格式属性。

在调用基类的构造函数之后,可以扩展类,实现静态公共属性来存储默认属性,并在新类的构造函数中设置所需的属性。

这样的事情:

class CustomNumberFormatter extends NumberFormatter
{
    public static $maxFractionDigits = 12;    // Set the most used value as default
    // Other attributes here

    public function __construct($locale, $style, $pattern = NULL)
    {
        // Let the parent class constructor initialize the object
        parent::__construct($local, $style, $pattern);

        // Set default attributes
        $this->setAttribute(NumberFormatter::MAX_FRACTION_DIGITS, static::$maxFractionDigits);
        // Other attributes here
    }

    // It's good to redefine the static method create()
    public static function create($locale, $style, $pattern = NULL)
    {
        // Make sure it returns an object of type CustomNumberFormatter
        return new static($locale, $style, $pattern);
    }
}


// Usage
// Set the default attributes
CustomNumberFormatter::$maxFractionDigits = 5;
// Create objects
$formatter1 = new CustomNumberFormatter('ro-RO', NumberFormatter::DECIMAL);
$formatter2 = CustomNumberFormatter::create('ro-RO', NumberFormatter::DECIMAL);

请注意,它仅适用于使用new CustomNumberFormatter()CustomNumberFormatter::create()创建的对象。

使用NumberFormatter::create()(又名numfmt_create())创建的对象是NumberFormater类型的对象,它们没有您使用类CustomNumberFormatter设置的任何默认值。