代码可以如此简洁灵活!
时间:2011-02-18 来源:Neoh
请阅读如下代码:
static function create($length = 4, $lefttime = 900,
$style = 'simple', array $options = null)
{
$class_name = 'Helper_ImgCode' . ucfirst(strtolower(preg_replace('/[^a-z0-9_]+/i', '', $style)));
$options = (array)$options;
$options['code_length'] = $length;
$imgcode_obj = new $class_name($options);
$code = $imgcode_obj->generateCode();
self::_writeImgcodeToSession($code, $lefttime);
return $imgcode_obj->generateImage($code);
}
发现了吗?被调用的类名是动态构造的!!!
先将$style字符串去掉非法字符:preg_replace('/[^a-z0-9_]+/i', '', $style)
然后全部转化为小写:strtolower(preg_replace('/[^a-z0-9_]+/i', '', $style))
再把首字母大写:ucfirst(strtolower(preg_replace('/[^a-z0-9_]+/i', '', $style)))
连接之后变成了一个需要的类名:$class_name = 'Helper_ImgCode' . ucfirst(strtolower(preg_replace('/[^a-z0-9_]+/i', '', $style)));
最后通过类名变量调用类代码,创建了一个对象:$imgcode_obj = new $class_name($options);
短短的两行代码,省去了switch语句繁杂。
好处不只是在于简洁,以后想要有不同的style来处理的话只需要改变$style值,然后再写一个对应的类就可以了。达到了很好的扩展性。