前言:
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,不容易被发现,所以在这里,安全性要高于性能。
 
参考:

PHP判断变量类型和类型转换的三种方式的更多相关文章

  1. PHP中数据类型转换的三种方式

    PHP中数据类型转换的三种方式 PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有: 1.(int).(integer):转换成整形2.(float).(double).(real):转换成 ...

  2. python 判断变量是否是 None 的三种写法

    代码中经常会有变量是否为None的判断,有三种主要的写法:第一种是`if x is None`:第二种是 `if not x:`:第三种是`if not x is None`(这句这样理解更清晰`if ...

  3. 2、shader基本语法、变量类型、shader的三种形式、subshader、fallback、Pass LOD、tags

    新建一个shader,名为MyShader1内容如下: 1._MainTex 为变量名 2.“Base (RGB)”表示在unity编辑面板中显示的名字,可以定义为中文 3.2D 表示变量的类型 4. ...

  4. 数据类型转换的三种方式 Convert,parse和TryParse的解析

    以Int类型为例,具体说明Convert.ToInt32(object value),int.Parse(object value)和int.TryParse(string s,out int res ...

  5. JS判断图片是否加载完成三种方式

    1.img的complete属性 轮询不断监测img的complete属性,如果为true则表明图片已经加载完毕,停止轮询.该属性所有浏览器都支持. <p id="p1"&g ...

  6. Javascript 判断变量类型的陷阱 与 正确的处理方式

    Javascript 由于各种各样的原因,在判断一个变量的数据类型方面一直存在着一些问题,其中最典型的问题恐怕就是 typeof null 会返回 object 了吧.因此在这里简单的总结一下判断数据 ...

  7. php判断变量类型

    php判断变量类型 一.总结 一句话总结: gettype()函数:gettype(1);返回的是integer is_array():is系列函数 1.PHP empty.isset.isnull的 ...

  8. JavaScript 变量克隆和判断变量类型

    一.变量克隆 在js中经常会遇到将一个变量赋值给一个新的变量这种情况,这对于基本类型很容易去实现,直接通过等号赋值就可以了,对于引用类型就不能这样了.(注:像函数,正则也可以直接通过等号赋值) 这里我 ...

  9. 记住 Python 变量类型的三种方式

    title: 记住变量类型的三种方式 date: 2017-06-11 15:25:03 tags: ['Python'] category: ['Python'] toc: true comment ...

随机推荐

  1. Leetcode题库——9.回文数

    @author: ZZQ @software: PyCharm @file: HuiWenShu.py @time: 2018/9/16 16:51 要求:判断一个整数是否是回文数.回文数是指正序(从 ...

  2. 内网php项目访问(切换在线解决)

    之前内网访问出现过问题: 可参考手机访问本地php项目遇到的问题及解决(2015-06-20 09:41) 后来重装wamp之后,要访问还是出现问题 即http://192.168.191.1/mui ...

  3. 【图论】POJ-3169 差分约束系统

    一.题目 Description Like everyone else, cows like to stand close to their friends when queuing for feed ...

  4. Alpha版本冲刺(四)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:何家伟 组员8:政演 组员9:鸿杰 组员10:刘一好 组员:何宇恒 展示组内最新 ...

  5. IO流的各种继承关系

  6. 学术诚信与职业道德——《构建之法》P384~391读后感

    程序本身没有伦理和职业道德, 但是程序员和软件企业要有,因为程序员明白伦理道德的存在. 对于刚刚经历被不负责队友抛下的经历,对此很有感触,软件工程师除了遵守任务做事,也要考虑道德上.责任上的事情. 就 ...

  7. 移动端-webkit-user-select:none导致input/textarea输入框无法输入

    这个问题,也算是个大坑了. 最开始的开始,是因为我们在做大装盘活动的时候,发现在ios上面出现了这样的问题:点击“转”按钮,ios上面会有延迟并且会出现图片的阴影,这个肯定就不好看了撒,然后,找吧,改 ...

  8. area point sql

    UPDATE aa_info_area t,(SELECT areaId, areacenter,CONCAT('POINT(' ,substring_index(areacenter,',', 1) ...

  9. mysql 数据到 导入导出 总结

    数据库数据的导入和导出受secure_file_priv配置项影响#限制导入导出,null时无法进行数据的导入导出,空时不限制,设置了目录则只能对该目录下的文件进行导入导出show variables ...

  10. [知乎]老狼:深入PCI与PCIe之二:软件篇

    深入PCI与PCIe之二:软件篇 https://zhuanlan.zhihu.com/p/26244141 我们前一篇文章(深入PCI与PCIe之一:硬件篇 - 知乎专栏)介绍了PCI和PCIe的硬 ...