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 -------------------------------------

     

  • 相关阅读:
    Software Solutions CACHE COHERENCE AND THE MESI PROTOCOL
    CACHE COHERENCE AND THE MESI PROTOCOL
    Multiprocessor Operating System Design Considerations SYMMETRIC MULTIPROCESSORS
    Organization SYMMETRIC MULTIPROCESSORS
    PARALLEL PROCESSING
    1分钟内发送差评邮件
    Secure Digital
    SYMMETRIC MULTIPROCESSORS
    A Taxonomy of Parallel Processor Architectures
    parallelism
  • 原文地址:https://www.cnblogs.com/f158w058/p/6548057.html
Copyright © 2011-2022 走看看