我有一个只需要计算一次的值。我不能用const
它来声明它,因为我需要运行一些函数来最初计算。我希望能够以某种受保护的方式存储它并在(命名空间)全局函数中访问它。这样做的好模式是什么?这是我所拥有的:
选项 1 - 效果很好,但仅适用于常量,所以我不能使用它:
<?php
namespace my;
const PREFIX = 'example';
/**
* my\get_prefix()
*/
function get_prefix () {
return PREFIX;
}
选项 2 - 命名空间函数从预先配置的命名空间公共静态类访问值:
<?php
namespace my;
class Hash {
public static $prefix;
public static function configure () {
self::$prefix = call_user_func(function () {
// calculate and return a string
});
}
}
Hash::configure();
/**
* my\get_prefix()
*/
function get_prefix () {
return Hash::$prefix;
}
选项 3 - 类似于 #2,但此处配置运行第一次get_prefix
被调用,并且每次都检查为字符串:
<?php
namespace my;
class Hash {
public static $prefix;
}
/**
* my\get_prefix()
*/
function get_prefix () {
if ( is_string(Hash::$prefix) )
return Hash::$prefix;
Hash::$prefix = call_user_func(function () {
// calculate and return a string
});
return Hash::$prefix;
}
选项 4 - 通过使用静态方法/私有 var 完全保护,但如果通过以下方式调用,则会添加额外的函数调用my\get_prefix()
:
<?php
namespace my;
class Hash {
private static $prefix;
public static function configure () {
if ( isset(self::$prefix) ) return;
self::$prefix = call_user_func(function () {
// calculate and return a string
});
}
public static function get_prefix () {
return self::$prefix;
}
}
Hash::configure();
/**
* my\get_prefix()
*/
function get_prefix () {
return Hash::get_prefix();
}