这是一个关于通过实施下面所示解决方案的一般性能的问题。我知道这可能是基于意见的,但我想知道是否有人清楚地知道这是一个好的实现,还是应该以更好的方式解决。
这只是一个例子,但我们先创建一个名为Member的类。当我们列出数据库中的所有成员时,这将被多次实例化。现在,因为在这个例子中,这是一个古老而复杂的系统,每次显示完整的成员列表时,可以多次实例化一个成员。因此,为了减少每次获取成员的整个操作,我们将实例化对象缓存在类的静态属性中,如果它已经存在则返回:
class Member {
protected static $cachedMember = null;
public static function get($id){
if ( isset( self::$cachedMember[$id] ) ) return self::$cachedMember[$id];
// If its not set, we fetch it from database...
$obj = new static();
// Fetching member from database and applying the applicable values to $obj
// Then we set the filled $obj to the $cachedMember static.
self::$cachedMember[$id] = $obj;
return $obj;
}
}
显然,这会占用一些内存,具体取决于使用唯一成员ID实例化Member
类的次数。但是当脚本结束时(这是正确的?)依次释放。所以只要PHP有足够的内存分配,我的理解是没有其他的缺点这个实现?
答案 0 :(得分:1)
是的,该方法应该可以避免在脚本运行期间从数据库中多次获取具有相同ID的成员。
是的,内存在脚本结束时被释放,但内存在这里不应该是一个大问题,因为PHP只存储对静态数组中每个对象的引用,而不是对象本身。
一个错字:
$obj = new self();