zoukankan      html  css  js  c++  java
  • PHP判断变量类型和类型转换的三种方式

    前言:
    PHP 在变量定义中不需要(不支持)明确的类型定义。变量类型是根据使用该变量的上下文所决定的。所以,在面对页码跳转、数值计算等严格的格式需求时,就要对变量进行类型转换。
    举例如下:
    $foo = "1"; // $foo 是字符串 (ASCII 49)
    $foo *= 2; // $foo 现在是一个整数 (2)
    $foo = $foo * 1.3; // $foo 现在是一个浮点数 (2.6)
    $foo = 5 * "10 Little Piggies"; // $foo 是整数 (50)
    $foo = 5 * "10 Small Pigs"; // $foo 是整数 (50)
     
    正文:
    问题:
    1、PHP如何判断变量类型?
    2、PHP的类型转换方式有哪三种?每种方式都有何函数?
     
    判断变量类型:
    两种方式:
    • gettype()
    • is_各种类型(),比如is_array,is_bool,is_string,is_float,is_integer,is_null,is_numeric,is_object,is_scalar(标量),is_resource
    区别:
    官方不提倡使用gettype()来测试某种类型,因为其返回的字符串在未来的版本中可能需要改变。此外,由于包含了字符串的比较,它的运行也是较慢的。
    可是,在实际使用中,我更想要只使用一个函数就判断出变量的类型,所以我更喜欢使用gettype()。而且用第二种方式也不过是判断某一时刻的变量类型而已,并没有解决弱类型变量的基本问题。
    所以,我认为在使用gettype时,只要尽量避免对需要进行改变或运算的变量判断类型,只判断已经固定类型或运算结束的变量即可。就比如前言中举例的五个变量都可以在运算结束后使用gettype($foo)。
     
    PHP的三种类型转换方式:
    1. 在要转换的变量之前加上用括号括起来的目标类型(强制转换)
    2. 使用3个具体类型的转换函数,intval()、floatval()、strval()
    3. 使用通用类型转换函数settype(mixed var,string type)
    解释:
    1. 强制转换方式沿袭自C,是一种粗暴的转换,不太安全,准确性不能保证,不推荐。
    2. intval() 方式较为常见,int intval ( mixed $var [, int $base = 10 ] )中$base表示转化所使用的进制,成功返回integer值,失败返回0。
    3. bool settype ( mixed &$var , string $type )是一种原地改变类型的方式,如果结果为true,直接继续操作原变量即可。
    举例:
    $a='0X11';
    dump((int)$a);//int 0
    dump(intval($a,16));//int 17
    $flag=settype($a,"integer");
    dump($flag);//boolean true
    dump($a);//int 0
    总结:
    从使用场景上说,假设要转变成integer型,原变量是"0X0001"、"1a",这三种方法里面效果最好的是第二种intval()。但是无论哪种方法都需要在转换类型前做好数据检验工作,最好是先结合正则过滤字符串的每个字符,这样就能避免很多非法数据的转换了。变量类型转换可能会造成重大的隐藏bug,不容易被发现,所以在这里,安全性要高于性能。
     
    参考:
  • 相关阅读:
    各种小例子
    作业 5/20
    课程总结
    构建之法 读书笔记一
    Android实现本地音频播放(可拖动条)
    自我介绍
    上周总结
    《梦断代码》读书笔记三
    《梦断代码》读书笔记二
    《梦断代码》读书笔记一
  • 原文地址:https://www.cnblogs.com/cquptzzq/p/8493477.html
Copyright © 2011-2022 走看看