之前在阅读代码的时候发现代码中大量出现类似于ModelName::instance()方法。所以特意去查看了一下该方法的实现。代码如下:
/**
* Returns static class instance, which can be used to obtain meta information.
* @param bool $refresh whether to re-create static instance even, if it is already cached.
* @return static class instance.
*/
public static function instance($refresh = false)
{
$className = get_called_class();
if ($refresh || !isset(self::$_instances[ $className ])) {
self::$_instances[ $className ] = Yii::createObject($className);
}
return self::$_instances[ $className ];
}
我们平时在调用model类中的方法时,可能会采用以下方式:
$model = new ModelName();
$model ->funName();
那么使用instance有什么优势呢?
看一下官方对该方法的解释:返回静态类实例,可用于获取meta信息。就是通过单例模式来返回类实例。从而去调用类里面的方法。单例模式的作用就不多说了(一个类只有一个实例)。
网友评论