zoukankan      html  css  js  c++  java
  • 强制类型转换

    获取数据类型 :

      如果想查看某个表达式的值和类型,用var_dump()。 
      如果只是想得到一个易读懂的类型的表达方式用于调试,用 gettype()。
      要查看某个类型,不要用 gettype(),而用is_type() 函数。
     

    PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有:

      (int), (integer) - 转换为整形 integer
      (bool), (boolean) - 转换为布尔类型 boolean
      (float), (double), (real) - 转换为浮点型 float
      (string) - 转换为字符串 string
      (array) - 转换为数组 array
      (object) - 转换为对象 object
      (unset) - 转换为 NULL (PHP 5)

     

    数据类型有三种转换方式:

      在要转换的变量前加上用括号括起来的目标类型

      使用转换函数intval(), floatval(), strval()

      使用类型转换函数settype(mixed var, string type)  

     1 <?php
     2  2     /*
     3  3      *  第一种转换方式: (int)  (bool)  (float)  (string)  (array) (object)
     4  4      */
     5  5     $num1 = 3.2;
     6  6     $num2 = (int)$num1;
     7  7     var_dump($num1);  //输出 float 3.2
     8  8     var_dump($num2);  //输出 int 3
     9  9 
    10 10     /*
    11 11      *  第二种转换方式:  intval()  floatval()  strval()
    12 12      */
    13 13     $str = "34.35fd";
    14 14     $int = intval($str);
    15 15     $float = floatval($str);
    16 16     $string = strval($str);
    17 17     var_dump($int);  //输出 int 34
    18 18     var_dump($float);  //输出 float 34.35
    19 19     var_dump($string);  //输出 string '34.35fd' (length=7)
    20 20 
    21 21     /*
    22 22      * 第三种转换方式:  settype();
    23 23      */
    24 24     $num4 = 12.8;
    25 25     $flag = settype($num4, "int");
    26 26     var_dump($flag);  //输出 boolean true
    27 27     var_dump($num4);  //输出 int 12
    28 28 
    29 29     /*
    30 30      *  判断数据类型使用gettype()函数
    31 31      */
    32 32     var_dump(gettype($num1));
    33 33     var_dump(gettype($num2));
    34 34     var_dump(gettype($str));
    35 35     var_dump(gettype($int));
    36 36     var_dump(gettype($float));
    37 37     var_dump(gettype($string));
    38 38     var_dump(gettype($num4));
    39 39 ?>

    字符串转为数值

      如果该字符串没有包含 '.','e' 或 'E' 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),

      该字符串将被当成 integer 来取值。其它所有情况下都被作为 float 来取值。

      该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。

      合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),

      再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成。

     1 <?php
     2 $sSeparate = "";
     3 echo '结果',"&nbsp;&nbsp;&nbsp;&nbsp;",$sSeparate,'类型',"<br />";
     4 $mFoo = 1 + '10.5';
     5 echo $mFoo,"&nbsp;&nbsp;&nbsp;&nbsp;",$sSeparate,getType($mFoo),"<br />";
     6 
     7 $mFoo = 1 + '10';
     8 echo $mFoo,"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;",$sSeparate,getType($mFoo),"<br />";
     9 
    10 $mFoo = 1 + '-1.3e3';
    11 echo $mFoo,"&nbsp;&nbsp;&nbsp;",$sSeparate,getType($mFoo),"<br />";
    12 
    13 $mFoo = 1 + 'hello';
    14 echo $mFoo,"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;",$sSeparate,getType($mFoo),"<br />";
    15 
    16 $mFoo = 1 + '99hello';
    17 echo $mFoo,"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;",$sSeparate,getType($mFoo),"<br />";
    18 
    19 $mFoo = 1 + '99.90hello';
    20 echo $mFoo,"&nbsp;&nbsp;&nbsp;&nbsp;",$sSeparate,getType($mFoo),"<br />";

    结果     类型

    11.5      double
    11       integer
    -1299      double
    1       integer
    100     integer
    100.9      double

     

    转为字符串型

      一个值可以通过在其前面加上 (string) 或用 strval() 函数来转变成字符串。在一个需要字符串的表达式中,

      会自动转换为 string。比如在使用函数 echo 或 print 时,或在一个变量和一个 string 进行比较时,就会发生这种转换。

      类型和类型转换可以更好的解释下面的事情,也可参考函数 settype()。

      一个布尔值 boolean 的 TRUE 被转换成 string 的 "1"。Boolean 的 FALSE 被转换成 ""(空字符串)。这种转换可以在 boolean 和 string 之间相互进行。

      一个整数 integer 或浮点数 float 被转换为数字的字面样式的 string(包括 float 中的指数部分)。使用指数计数法的浮点数(4.1E+6)也可转换。

    Note:
      在脚本的区域(category LC_NUMERIC)中定义了十进制小数点字符。参见 setlocale()。
      数组 array 总是转换成字符串 "Array",因此,echo 和 print 无法显示出该数组的内容。要显示某个单元,可以用 echo $arr['foo'] 这种结构。要显示整个数组内容见下文。

      在 PHP 4 中对象 object 总是被转换成字符串 "Object"。

      资源 resource 总会被转变成 "Resource id #1" 这种结构的字符串,其中的 1 是 PHP 在运行时分配给该 resource 的唯一值。不要依赖此结构,可能会有变更。

      要得到一个 resource 的类型,可以用函数 get_resource_type()。

      NULL 总是被转变成空字符串。

      如上面所说的,直接把 array,object 或 resource 转换成 string 不会得到除了其类型之外的任何有用信息。可以使用函数 print_r() 和 var_dump() 列出这些类型的内容。

    1 <?php
    2 var_dump(strval(10));       //string(2) "10"
    3 var_dump(strval(FALSE));    //string(0) ""
    4 var_dump(strval(true));     //string(1) "1"
    5 var_dump(strval(100.09));   //string(6) "100.09"
    6 var_dump(strval(NULL));     //string(0) ""
    7 ?>

    转为数组型

      对于任意 integer,float,string,boolean 和 resource 类型,如果将一个值转换为数组,将得到一个仅有一个元素的数组,其下标为 0,该元素即为此标量的值。

      换句话说,(array)$scalarValue 与 array($scalarValue) 完全一样。

      如果一个 object 类型转换为 array,则结果为一个数组,其单元为该对象的属性。键名将为成员变量名,不过有几点例外:

      整数属性不可访问;私有变量前会加上类名作前缀;保护变量前会加上一个 '*' 做前缀。这些前缀的前后都各有一个 NULL 字符。

      NULL为空数组

     1 <?php
     2 print_r((array)10);
     3 /*
     4 Array
     5 (
     6     [0] => 10
     7 )
     8 */
     9 print_r((array)100.09);
    10 /*
    11 Array
    12 (
    13     [0] => 100.09
    14 )
    15 */
    16 
    17 print_r((array)0);
    18 /*
    19 Array
    20 (
    21     [0] => 0
    22 )
    23 */
    24 print_r((array)-10);
    25 /*
    26 Array
    27 (
    28     [0] => -10
    29 )
    30 */
    31 print_r((array)'string');
    32 /*
    33 Array
    34 (
    35     [0] => string
    36 )
    37 */
    38 print_r((array)'0');
    39 /*
    40 Array
    41 (
    42     [0] => 0
    43 )
    44 */
    45 print_r((array)true);
    46 /*
    47 Array
    48 (
    49     [0] => 1
    50 )
    51 */
    52 print_r((array)FALSE);
    53 /*
    54 Array
    55 (
    56     [0] => 
    57 )
    58 */
    59 print_r((array)NULL);
    60 /*
    61 Array
    62 (
    63 )
    64  */
    65 
    66 class A
    67 {
    68     private $_A = 'A';      //私有
    69     protected $B;           //受保护的
    70 }
    71 
    72 class B extends A
    73 {
    74     public $C;              //公有
    75     public function __construct()
    76     {
    77         $this->B = 'B';
    78         $this->C = 'C';
    79     }
    80 }
    81 print_r((array) new B());
    82 /*
    83 Array
    84 (
    85     [C] => C
    86     [A_A] => A,私有变量前面会加上类名作为前缀
    87     [*B] => B,受保护变量回家上*作为前缀
    88 )
    89 */
    90 ?>            

    转为布尔型

      要明确地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换。

      但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制结构需要一个 boolean 参数时,该值会被自动转换。

     1   <?php
     2   /**
     3    * 当转换为 boolean 时,以下值被认为是 FALSE:
     4    * 布尔值 FALSE 本身
     5    * 整型值 0(零)
     6    * 浮点型值 0.0(零)
     7    * 空字符串,以及字符串 "0"
     8    * 不包括任何元素的数组
     9    * 不包括任何成员变量的对象(仅 PHP 4.0 适用)
    10   * 特殊类型 NULL(包括尚未赋值的变量)
    11   * 从空标记生成的 SimpleXML 对象
    12   **/
    13  var_dump(FALSE);                        #bool(false)
    14  var_dump((boolean)'');                  #bool(false)
    15   var_dump((boolean)'string');            #bool(true)
    16  var_dump((boolean)'0');                 #bool(false)
    17  var_dump((boolean)1);                   #bool(true)
    18  var_dump((boolean)1.0);                 #bool(true)
    19  var_dump((boolean)-1);                  #bool(true)
    20  var_dump((boolean)0);                   #bool(false)
    21  var_dump((boolean)2.2e5);               #bool(true)
    22  var_dump((boolean)array('one','two'));  #bool(true)
    23  var_dump((boolean)array());             #bool(false)
    24  $sTest = 'test';
    25  unset($sTest);
    26  var_dump((boolean)$sTest);              #bool(false)
    27  var_dump((boolean)null);                #bool(false)
    28  var_dump((boolean)$sNotDefined);        #bool(false)
    29  ?>

     更详细的比较表格看 PHP 类型比较表 。

    对null的判断

     1 <?php
     2 $a;
     3 $b = null;
     4 $c = 'null';
     5 _is_null($a);
     6 _is_null($b);
     7 _is_null($c);
     8 function _is_null($var)
     9 {
    10     echo '$var == null , ',var_dump($var == null).PHP_EOL;
    11     echo '$var == \'null\' , ',var_dump($var == 'null').PHP_EOL;
    12     echo 'is_null($var) , ',var_dump(is_null($var)).PHP_EOL;
    13     echo '-------------------------------------'.PHP_EOL;       
    14 }
    15 ?>
    16 $var == null , bool(true)
    17 
    18 $var == 'null' , bool(false)
    19 
    20 is_null($var) , bool(true)
    21 
    22 -------------------------------------
    23 $var == null , bool(true)
    24 
    25 $var == 'null' , bool(false)
    26 
    27 is_null($var) , bool(true)
    28 
    29 -------------------------------------
    30 $var == null , bool(false)
    31 
    32 $var == 'null' , bool(true)
    33 
    34 is_null($var) , bool(false)
    35 
    36 -------------------------------------

     

  • 相关阅读:
    删除表空间的时候遇到的问题:ORA-02429: 无法删除用于强制唯一/主键的索引
    删除
    Activity中使用getSystemService获得系统服务
    用多线程实现反应灵敏的界面(Java)
    用数组实现3个栈之固定分割(Java)
    Android小知识点20条
    Android数据库中数据文件的导出与查看
    MFC中使用CSplitterWnd分割窗口后设置视图大小的问题
    MFC中,通过preCreateWindow函数无法设置视图样式(包括窗口的大小)
    6:Node.js 路由
  • 原文地址:https://www.cnblogs.com/f158w058/p/6548057.html
Copyright © 2011-2022 走看看