初始化首选项
* @param array $config
* @param bool $reset
* @return TS_Upload
*/
public function initialize(array $config=array(),$reset=true)
{
$reflection=new ReflectionClass($this);
if($reset==true)
{
$default=$reflection->getDefaultProperties();//获取默认属性
foreach(array_keys($default) as $key)
{
if($key[0]==='_')
{
continue;
}
if(isset($config[$key]))
{
//查看本类是否有这个方法
if($reflection->hasMethod('set_'.$key))
{
//调用本方法,($config[$key])表示我们自定义的$config的值给这个方法
$this->{'set_'.$key}($config[$key]);
}else
{
//如果不是方法,就赋给成员变量,如果没有定义这个成员变量,就表示是动态变量,赋的是我们$config数组中的值
$this->$key=$config[$key];
}
}
else
{
//如果在$config没有找到这个匹配的$key,那么就给成员变量赋默认值
$this->$key=$default[$key];
}
}
}
else
{
//这里是一个简化版,也是查找本类的方法和属性,如果找到即赋值和传递参数
foreach($config as $key=>&$value)
{
if($key[0] !=='_' && $reflection->hasProperty($key)) //hasProperty()检查属性是否已定义
{
if($reflection->hasMethod('set_'.$key))
{
$this->{'set_'.$key}($value);
}
else
{
$this->$key=$value;
}
}
}
}
//如果在配置中提供了file_name,则使用它代替用户输入的所有上传文件名,直到再次初始化
$this->_file_name_override=$this->file_name;
return $this;
}