本文共 1341 字,大约阅读时间需要 4 分钟。
问题源于细说PHP的教学视频:PHP设计超级好用的文件上传处理类。视频中在构造函数中采用了数组来传参数,然后根据这些参数名是否是类的成员名来给成员赋值。代码片段如下:
1 <?php
2 class FileUpload 3 { 4 //指定上传路径,允许的类型,限制文件大小,是否使用随机文件名 5 private $file_path; 6 private $allowed_types = array('gif', 'png', 'jpg', 'jpeg'); 7 private $max_size = 100000; 8 private $name_random = true; 9 10 function __construct($options) { 11 foreach($options as $key=>$value) { 12 $key = strtolower($key); 13 $vars = get_class_vars(get_class($this)); 14 if(!in_array($key, $vars)) { 15 continue; 16 } 17 $this->$key = $value; 18 } 19 } 20 21 function __destruct() { 22 } 23 }首先说明的是,这里不应该使用in_array(),因为in_array是判断数组元素的值而不是元素的索引键值,这一点在《细说PHP》第二版371页已经改成是array_key_exists了。
然而上述函数在这里却歪打正着地好用,因为实际上,无论传入什么样的参数,均会在第14行中的in_array()返回true,我们要分析的就是为什么总返回true。
或 | 将 NULL 转换为 "",进行数字或词汇比较 | |
或 | 任何其它类型 | 转换为 ,FALSE <TRUE |
内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的 | ||
, 或 | , 或 | 将字符串和资源转换成数字,按普通数学比较 |
具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较(见下例) | ||
任何其它类型 | 总是更大 | |
任何其它类型 | 总是更大 |
转载地址:http://mazpi.baihongyu.com/