前言:
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. 20162328蔡文琛week08

    学号 20162328 <程序设计与数据结构>第X周学习总结 教材学习内容总结 错误和异常代表不常见的或不正确处理的对象. 抛出异常时输出的消息提供了方法调用栈的轨迹. 每个catch子句 ...

  2. iOS开发学习-放大长图与屏幕等宽

    /* 需要得到一个图片的放大比例,这个比例就是屏幕的宽度与图片真实宽度的比值 */ CGFloat newZoomScale = LZ_SCREEN_WIDTH / [_photoImageView. ...

  3. 四则运算《《《《SQL出题

    设计思路: 这次要用数据库存储题目,我想到的是用SQL server数据库,用dataGridView控件读取数据. 具体实现: DBCon.cs 1 using System; 2 using Sy ...

  4. Java大数——快速矩阵幂

    Java大数——快速矩阵幂 今天做了一道水题,尽管是水题,但是也没做出来.最后问了一下ChenJ大佬,才慢慢的改对,生无可恋了.... 题目描述: 给a,b,c三个数字,求a的b次幂对c取余. 数据范 ...

  5. IO流的各种继承关系

  6. *** error 65: access violation at C:0x001B : no 'execute/read' permission

    转自:http://blog.csdn.net/chenqiai0/article/details/7827071 很多人在进行串口调试的时候会遇到这个问题,请大家略看我的代码,解决方法在其中 //实 ...

  7. 10.13课堂Scrum站立会议

    项目名称:C#实现的连连看游戏 小组名称:计信F4 开会时间 :2016年10月11日 20:20~20:40 组长:张政 成员:张金生,武志远,李泉 内容: 昨日已完成: 张政:构建基础逻辑,实现游 ...

  8. 获取php版本

    phpversion()函数可以获取版本 version_compare可以比较两个版本 mixed version_compare ( string $version1 , string $vers ...

  9. TP5 多入口文件配置的坑

    闲话不多说,TP5(5.0.20) 在配置多入口文件的时候你是否遇到过一下的问题呢? 开发设计的需求吧网站拆分为前台.后台.API 3 个模块,对应的也需要3个入口文件,后台和API入口文件是用PAT ...

  10. HashMap,HashTable,concurrentHashMap,LinkedHashMap 区别

    HashMap 不是线程安全的 HashTable,concurrentHashMap 是线程安全 HashTable 底层是所有方法都加有锁(synchronized) 所以操作起来效率会低 con ...