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