Maison  >  Article  >  类库下载  >  PHP弱类型安全问题

PHP弱类型安全问题

高洛峰
高洛峰original
2016-10-10 09:51:501124parcourir

一、类型转换问题

 intval();
 
    var_dump(intval('1asdfasd'));  //1
    var_dump(intval('awqw12'));  //0
    var_dump(intval(array()));    //0
    var_dump(intval(array('foo','val'))); //1
    var_dump(intval(0x1A)); //26  十六进制转换
    var_dump(intval('asdfqwer')); //0

intval 如果转换值为字符串时,不会返回错误,而是返回 0,如果转换值为数组时,有两种情况,转换值为空数组时,则会返回0,否则就会返回 1

    注意:php用32位内存来保存一个整数,32位可以表示4294967296个数字,有符号的话就是-2147483647到2147483648;

二、内置函数松散性问题

switch();
 
     $i='3adcd';
     switch($i){
              case 1:
                     echo 'i is 1';
                     break;
              case 2:
                     echo 'i is 2';
                     break;
              case 3:
                     echo 'i is 3';
                     break;
              default:
                    echo 'i is default';
                    break;
     }

以上结果,会进入switch case 3 里面,为什么会这样,如果switch是数字类型的case的判断时,switch会将其中的参数转换为int类,所以上述执行的时候,首先会把$i进行了类型转换,转换结果为3 ,所以。。。

in_array();
    $arr = [0,1,2,3,'test'];
    var_dump(in_array('abd',$arr));    // true
    var_dump(in_array('1bc',$arr));    // true

为什么上面执行结果会是这样的,后面通过查询手册,官方给出的说法是, in_array 默认是走松散比较方式,只比值是否相等,而不比较值的类型是否一样,所以才有上面这种结果,不过可以设置in_array 函数第三个参数,设置为True就是严谨的比较方式。

 

 

以上都是我们平常开发需要注意的地方。


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Articles Liés

Voir plus