PHP:类型

本文深入讲解PHP中的八种数据类型,包括布尔型、整型、浮点型、字符串、数组、对象、资源和NULL类型。文章详细介绍了每种类型的语法、特点及类型转换规则,并通过实例演示了如何在实际编程中运用这些类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>类型</title>
</head>
<body>
<?php

  date_default_timezone_set("Asia/Shanghai");


  /**
   * PHP支持8种原始数据类型
   * 四种标量: 
   *  1. boolean(布尔型)
   *  2. integer(整型)
   *  3. float(浮点型,也称作double)
   *  4. string(字符串)
   * 两种复合类型:
   *  1. array(数组)
   *  2. object(对象)
   * 两种特殊类型:
   *  1. resource(资源)
   *  2. NULL(无类型)
   * 确保代码的易读性:
   *  1. mixed(混合类型):说明一个参数可以接受多种不同的(但不一定是所有的)类型
   *  2. number(数字类型):说明一个参数可以是 integer  或者 float
   *  3. callback(回调类型)
   * tips: gettype()获取数据类型,is_string()、is_int()等is_type函数可以判断是否是指定类型
   */
  function demo() {
    $a_bool = TRUE;
    $a_str = "foo";
    $a_str2 = "foo";
    $an_int = 12;

    echo gettype($a_bool);
    echo "<br>";
    echo gettype($a_str);
    echo "<br>";
    echo gettype($a_str2);
    echo "<br>";
    echo "a_str2的值: ".gettype($an_int);
    echo "<br>";
    echo "<br>";
    echo "转换为整形后的a_str2的值: ".gettype($a_str2);
    echo "<br>";
    echo "<br>";

    if (is_int($an_int)) {
      $an_int +=4;
    }

    if (is_string($a_bool)) {
      echo "String: $a_bool ";
    }
  }
  // demo();

  /**
   * Boolean 布尔类型
   * 语法:要指定一个布尔值,使用关键字 TRUE  或 FALSE 。两个都不区分大小写
   * tips: 
   *  1. 通常运算符所返回的boolean值结果会被传递给控制流程
   *  2. 当转换为boolean时,以下值被认为是FALSE:
   *    2.1 布尔值FALSE本身
   *    2.2 整型值0
   *    2.3 浮点型值0.0
   *    2.4 空字符串,以及字符串"0"
   *    2.5 不包括任何元素的数组
   *    2.6 特殊类型NULL(包括尚未赋值的变量)
   *    2.7 从空标记生成的SimpleXML变量
   *  3. 所有其他值都被认为是TRUE(包括任何资源)
   */
  function demo2() {
    class A{

    }
    $ins_a = new A();
    // 语法
    $foo = TRUE;
    // 转换为布尔值
    var_dump((bool)"");   //false
    echo "<br>";
    var_dump((bool)1);    //true
    echo "<br>";
    var_dump((bool)-2);   //true
    echo "<br>";
    var_dump((bool)"foo");    //true
    echo "<br>";
    var_dump((bool)[]);   //false
    echo "<br>";
    var_dump((bool)$ins_a);   //true
    echo "<br>";
    var_dump((bool)"false");    //true
  }
  // demo2();

  /**
   * Interger整型
   * 语法:整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。
   * tips: 
   *  1. 整数溢出:如果给定的一个数超出了 integer  的范围,将会被解释为 float 。同样如果执行的运算结果超出了 integer  范围,也会返回 float
   *  2. 强制类型转换(int)
   *  3. 使用函数转换intval()获取整数值,未获取到值则为0
   *  4. 其他类型转换为整型
   *    4.1 布尔值转换:FALSE为0,TRUE为1
   *    4.2 浮点型转换:当从浮点数转换成整数时,将向下取整
   *    4.3 字符串转换:只取字符串首部数字
   */
  function demo3() {
    $a = 1234;    //十进制
    $a = -123;    //负数
    $a = 0123;    //八进制
    $a = 0x1A;    //十六进制

    var_dump(25/7);   //float(3.5714285714286) 
    echo "<br>";
    var_dump((int)(25/7));    //强制转换为整型int(3) 
    echo "<br>";
    var_dump(round(25/7));    //round()四舍五入值float(4)
    echo "<br>";

    // 转换为整型
    $str = "dadas1";
    $str2 = "22dadas";
    var_dump(intval($str));
    echo "<br>";
    var_dump(intval($str2));
    echo "<br>";
    // 决不要将未知的分数强制转换为 integer ,这样有时会导致不可预料的结果
    echo (int) ( ( 0.1 + 0.7 ) *  10  );  // 显示 7!
  }
  // demo3();

  /**
   * Float浮点型
   * 语法:也叫浮点数 float,双精度数 double 或实数 real
   * tips: 浮点数计算使用绝对值abs()
   */
  function demo4() {
    $a = 1.234;
    $b = 1.2e3;   //科学计数法
    $c = 7E-10;

    // 比较浮点数
    $aa = 1.23456789;
    $bb = 1.23456780;
    $epsilon = 0.00001;
    echo "浮点数计算: ".($aa - $bb);
    echo "<br>";
    if (abs($aa - $bb) < $epsilon) {
      echo "true";
    } else {
      echo "false";
    }
  }
  // demo4();

  /**
   * String字符串
   * 语法:一个字符串可以用4种方式表达:
   *  1.单引号: 变量和特殊字符的转义序列将不会被替换
   *  2.双引号: 解析特殊字符、变量等
   *  3.heredoc语法结构: 类似双引号
   *  4.nowdoc语法结构: 类似单引号
   * tips:
   *  1. 转换成字符串
   *    1.1 整数或浮点数被转换为数字的字面样式的string
   *    1.2 布尔值true转换为'1',false转换为''
   *    1.3 数组转换为'Array'字符串 
   *    1.4 对象转换为'Object'字符串
   *    1.5 资源转换为'Resource id #1',1为资源id
   *    1.1 NULL转换为''
   *  2. 一个值可以通过(string)或strval()强制转换为字符串
   * 
   */
  function demo5() {
    echo '\t';      //单引号不会解析
    echo '<br>';
    echo "转义字符缩进\t生效";    //双引号会解析
    echo '<br>';

    echo  'said: "I\'ll be back"' ;   //said: "I'll be back"
    echo '<br><hr>';

    // Heredoc结构
    $syn = 'syntax';
    $str = <<<EOD
Example of string
spanning multiple lines
using heredoc {$syn}.
EOD;
    echo $str;
    echo '<br><hr>';

    // Nowdoc结构
    $str2 = <<<'EOD'
Example of string
spanning multiple lines
using heredoc {$syn}.
EOD;
    echo $str2;
    echo '<br><hr>';

    // 简单的变量解析
    $var = 'xxl';
    echo "your name is $var";
    echo '<br>';
    // 复杂的变量解析,添加花括号'{}','{'和'$'之间不能有空格
    echo "your name is {$var}";
    echo '<br>';
    echo "your name is ${var}";
    echo '<br>';
    
    class beers {
      const softdrink = 'rb';
      public static $ale = 'ipa';
    }
    $rb = 'A & W';
    $ipa = 'AXL';
    echo "值: {${beers :: softdrink}} <br>";
    echo "值: {${beers :: $ale}}";
    echo '<br><hr>';

    // 索引值必须为整数,否则会报警告
    $str  =  'abc' ;
    var_dump ( $str [1]);
    var_dump (isset( $str [1]));
  }
  // demo5();

  /**
   * Array数组
   * tips: 
   *  1. key的强制转换:
   *    1.1 浮点会转整型
   *    1.2 布尔值会转整型,true1,false0
   *    1.3 包含有合法整型值的字符串会被转换为整型
   *    1.4 NULL转''
   *  2. 如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了
   */
  function demo6() {
    $arr = array(
      1 => 'a',
      '1' => 'b',
      1.5 => 'c',
      true => 'd',
    );
    var_dump($arr);   // array(1) { [1]=> string(1) "d" }
    echo '<br>';
    array_push($arr, 'ab');
    var_dump($arr);
    echo '<br>';
    $arr[] = 'cd';
    var_dump($arr);
    echo '<br>';
    unset($arr[1]);
    var_dump($arr);
    echo '<br><hr>';

    // []赋值和索引重置,unset()数组后,数组不会重建索引,要重建索引可以使用array_values()
    // 创建一个简单的数组
    $array  = array( 1 ,  2 ,  3 ,  4 ,  5 );
    print_r ( $array );echo '<br>';

    // 现在删除其中的所有元素,但保持数组本身不变:
    foreach ( $array  as  $i  =>  $value ) {
        unset( $array [ $i ]);
    }
    print_r ( $array );echo '<br>';

    // 添加一个单元(注意新的键名是 5,而不是你可能以为的 0)
    $array [] =  6 ;
    print_r ( $array );echo '<br>';

    // 重新索引:
    $array  =  array_values ( $array );
    $array [] =  7 ;
    print_r ( $array );
    echo '<br><hr>';

    $c1 = array(2, 3);
    $c2 = $c1;
    $c2[] = 4;
    print_r($c1);echo '<br>';
    print_r($c2);echo '<br><br>';
    $c3 = &$c1;
    $c3[] = 4;
    $c3[] = 5;
    print_r($c1);echo '<br>';
    print_r($c3);
    
  }
  // demo6();

  /**
   * Object对象
   */
  function demo7() {

  }
  // demo7();

  /**
   * Resource资源类型
   * 转换为资源:由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型的值转换为资源没有意义。
   * tips: 持久数据库连接比较特殊,它们不会被垃圾回收系统销毁
   */
  function demo8() {} 

  /**
   * NULL类型
   * 语法:NULL  类型只有一个值,就是不区分大小写的常量 NULL 
   * tips: 
   *  1. is_null()判断是否是NULL
   *  2. 下列情况下一个变量被认为是NULL:
   *    2.1 被赋值NULL 
   *    2.2 尚未被赋值
   *    2.3 被unset()
   *  3. 转到NULL (unset)变量
   */
  function demo9() {
    $var = NULL;
    echo $var;
    echo is_null($var);
    echo '<br>';
    $b = 123;
    echo $b;
    echo '<br>';
    $b = (unset)$b;   //转到NULL
    echo is_null($b);
  }
  // demo9();

  /**
   * Callback回调类型
   * tips: 
   *  1. call_user_func(callable $callback [,mixed $parameter [,mixed $...]])把第一个参数作为回调函数调用
   *  2. create_function() 可以用来创建一个匿名回调函数
   *  3. 在函数中注册有多个回调内容时(如使用 call_user_func()  与 call_user_func_array() ),如在前一个回调中有未捕获的异常,其后的将不再被调用
   */
  function demo10() {
    function my_callback_function () {
      echo 'hello world!<br>';
    }

    class MyClass {
      static function myCallbackMethod () {
        echo 'hello world!<br>';
      }
    }

    // 传入函数名
    call_user_func('my_callback_function');
    // 传入数组,包含类名和静态方法名
    call_user_func(array('MyClass', 'myCallbackMethod'));
    // 传入数组,包含对象下的静态方法名
    $obj = new MyClass();
    call_user_func(array($obj, 'myCallbackMethod'));
    // 传入调用静态方法
    call_user_func('MyClass::myCallbackMethod');
    // 类继承,调用静态方法
    class A {
      public static function who () {
        echo 'A<br>';
      }
    }
    class B extends A {
      public static function who () {
        echo 'B<br>';
      }
    }
    call_user_func(array('B', 'who'));
    call_user_func(array('B', 'parent::who'));
    echo '<br><hr>';

    // 匿名函数
    $double = function ($a) {
      return $a * 2;
    };
    $nums =  range ( 1 ,  5 );
    $new_nums = array_map($double, $nums);
    print_r($new_nums);
    print_r(implode($new_nums));
  }
  // demo10();

  /**
   * 类型转换的判别
   * tips:
   *  1. 允许的强制转换有
   *    1.1 (int), (integer) - 转换为整形 integer 
   *    1.2 (bool), (boolean) - 转换为布尔类型 boolean 
   *    1.3 (float), (double), (real) - 转换为浮点型 float 
   *    1.4 (string) - 转换为字符串 string 
   *    1.5 (array) - 转换为数组 array 
   *    1.6 (object) - 转换为对象 object 
   *    1.7 (unset) - 转换为 NULL  (PHP 5) 
   */
  function demo11() {
    $foo = "0";   //字符串(ASCII 48)
    echo "foo的值为 {$foo}<br>";
    $foo += 2;    //整数(2)
    echo "foo的值为 {$foo}<br>";
    $foo = $foo + 1.3;    //浮点数(3.3)
    echo "foo的值为 {$foo}<br>";
    $foo = 5 + "10 Little Piggies";   //整数(15)
    echo "foo的值为 {$foo}<br>";
    $foo = 5 + "10.1Small Pigs";   //整数(15)
    echo "foo的值为 {$foo}<br>";
    $foo = 5 + "Small Pigs12";   //整数(5)
    echo "foo的值为 {$foo}<br>";
  }
  demo11();



?>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值