<code>private $config = array( 'mimes' => array(), //允许上传的文件MiMe类型 'maxSize' => 0, //上传的文件大小限制 (0-不做限制) 'exts' => array(), //允许上传的文件后缀 'autoSub' => true, //自动子目录保存文件 'subName' => array('date', 'Y-m-d'), //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组 'rootPath' => './Uploads/', //保存根路径 'savePath' => '', //保存路径 'saveName' => array('uniqid', ''), //上传文件命名规则,[0]-函数名,[1]-参数,多个参数使用数组 'saveExt' => '', //文件保存后缀,空则使用原后缀 'replace' => false, //存在同名是否覆盖 'hash' => true, //是否生成hash编码 'callback' => false, //检测文件是否存在回调,如果存在返回文件信息数组 'driver' => '', // 文件上传驱动 'driverConfig' => array(), // 上传驱动配置 ); public function __construct($config = array(), $driver = '', $driverConfig = null){ /* 获取配置 */ $this->config = array_merge($this->config, $config); }</code>
이 클래스는 초기화 중에 이 배열 속성에 모든 구성을 넣지만 공식 문서를 읽을 때 다음과 같은 클래스 속성을 호출하여 이러한 구성을 설정할 수 있습니다.
<code>$upload = new \Think\Upload();// 实例化上传类 $upload->maxSize = 3145728 ;// 设置附件上传大小 </code>
이것을 보면 이해가 되지 않습니다. 이 maxSize는 논리적으로 말하면 $upload->config['maxSize']와 같이 할당되어야 합니다. 속성으로 직접? ?
<code>private $config = array( 'mimes' => array(), //允许上传的文件MiMe类型 'maxSize' => 0, //上传的文件大小限制 (0-不做限制) 'exts' => array(), //允许上传的文件后缀 'autoSub' => true, //自动子目录保存文件 'subName' => array('date', 'Y-m-d'), //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组 'rootPath' => './Uploads/', //保存根路径 'savePath' => '', //保存路径 'saveName' => array('uniqid', ''), //上传文件命名规则,[0]-函数名,[1]-参数,多个参数使用数组 'saveExt' => '', //文件保存后缀,空则使用原后缀 'replace' => false, //存在同名是否覆盖 'hash' => true, //是否生成hash编码 'callback' => false, //检测文件是否存在回调,如果存在返回文件信息数组 'driver' => '', // 文件上传驱动 'driverConfig' => array(), // 上传驱动配置 ); public function __construct($config = array(), $driver = '', $driverConfig = null){ /* 获取配置 */ $this->config = array_merge($this->config, $config); }</code>
이 클래스는 초기화 중에 이 배열 속성에 모든 구성을 넣지만 공식 문서를 읽을 때 다음과 같은 클래스 속성을 호출하여 이러한 구성을 설정할 수 있습니다.
<code>$upload = new \Think\Upload();// 实例化上传类 $upload->maxSize = 3145728 ;// 设置附件上传大小 </code>
이것을 보면 이해가 되지 않습니다. 이 maxSize는 논리적으로 말하면 $upload->config['maxSize']와 같이 할당되어야 합니다. 속성으로 직접? ?
액세스할 수 없는 속성에 값을 할당할 때 마법 메서드 __set(), __set()가 호출됩니다.
클래스의 __set() 메소드를 보세요...
<code>/** * 使用 $this->name 获取配置 * @param string $name 配置名称 * @return multitype 配置值 */ public function __get($name) { return $this->config[$name]; } public function __set($name, $value) { if (isset($this->config[$name])) { $this->config[$name] = $value; if ('driverConfig' == $name) { //改变驱动配置后重置上传驱动 //注意:必须选改变驱动然后再改变驱动配置 $this->setDriver(); } } }</code>
보세요, 이 두 가지 매직 메소드는 클래스 속성의 액세스와 연산을 다시 구현합니다.
이렇게 하면 클래스 속성 $config가 배열인 것처럼 보이지만 실제로는 배열의 클래스 속성 $config가 type은 이 두 가지 매직 메소드를 통해 사용할 수 있습니다. 각 요소는 클래스 속성 이름인 KEY와 클래스 속성 값인 VALUE를 사용하여 직접 작동됩니다.
이 두 가지 매직 메서드를 다시 작성하지 않고 다른 방식으로 작성하면 한눈에 알 수 있습니다.
<code>/** * 默认上传配置 * @var array */ $mimes = array(); //允许上传的文件MiMe类型 $maxSize = 0; //上传的文件大小限制 (0-不做限制) $exts = array(); //允许上传的文件后缀 $autoSub = true; //自动子目录保存文件 $subName = array('date', 'Y-m-d'); //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组 $rootPath = './Uploads/'; //保存根路径 $savePath = ''; //保存路径 $saveName = array('uniqid', ''); //上传文件命名规则,[0]-函数名,[1]-参数,多个参数使用数组 $saveExt = ''; //文件保存后缀,空则使用原后缀 $replace = false; //存在同名是否覆盖 $hash = true; //是否生成hash编码 $callback = false; //检测文件是否存在回调,如果存在返回文件信息数组 $driver = ''; // 文件上传驱动 $driverConfig = array(); // 上传驱动配置</code>
이것은 $driverConfig 클래스 속성의 특수성과도 관련이 있으며 이에 대해서는 별도로 논의됩니다. 귀하의 질문 범위를 벗어나기 때문입니다.