当你的才华

还撑不起你的野心时

那你就应该静下心来学习


目录

Integer 整型

Float 浮点型

String 字符串类型

Array 数组

Object 对象

Resource 资源

NULL

类型转换


一、PHP 支持的8种基本数据类型

四种标量类型:

• boolean(布尔型)
   • integer(整型)
   • float(浮点型,也称作 double)
   • string(字符串)

两种复合类型:

• array(数组)
   • object(对象)

最后是两种特殊类型:

• resource(资源)
   • NULL(无类型)

二、类型检测参数

   • var_dump() 函数可以查看表达式的值和类型
   • gettype() 函数用于检测变量类型
   • is_ 加类型,如 is_int(),is_array() 等,判断变量是否为该类型

创建cetest.php 文件,来验证类型检测参数的用法

  1. <?php
  2. $a = TRUE;
  3. $b = "清妹";
  4. $c = 0.123;
  5. $d = 123;
  6. if (is_string($b)) {
  7. echo "$b 是字符串".PHP_EOL;
  8. }
  9. if (is_int($c)) {
  10. echo "$c 是整型".PHP_EOL;
  11. }
  12. var_dump($a);
  13. var_dump($b);
  14. echo gettype($c).PHP_EOL;
  15. echo gettype($d);

执行结果如下:

三、Boolean 布尔类型

布尔类型表达真假值,可以为TRUE 或 FALSE,不区分大小写

  1. <?php
  2. $a = True;
  3. $b = False;
  4. # 布尔类型为True
  5. var_dump($a);
  6. # 布尔类型为False
  7. var_dump($b);

执行结果如下:

boolean 类型实例,执行结果创建cetest2.php:

  1. <?php
  2. $a = True;
  3. $b = False;
  4. $c = 'xxxx';
  5. // == 是一个操作符,它检测两个变量值是否相等,并返回一个布尔值
  6. if ($a == $b) {
  7. echo "a和b相等输出:Hello World\n";
  8. echo "------华丽分割线------\n";
  9. }else
  10. {
  11. echo "a和b不相等,不输出!\n";
  12. echo "------华丽分割线------\n";
  13. }
  14. // $b 的值是否为 True
  15. if ($b) {
  16. echo "b为真,输出:This is true!\n";
  17. }else
  18. {
  19. echo "b为假, 输出:不为True!\n";
  20. }

执行结果如下:

注:Boolean 时,其值为 FALSE

  • 布尔值 FALSE 本身
  • 整型值 0(零)
  • 浮点型值 0.0(零)
  • 空字符串,以及字符串 "0"
  • 不包括任何元素的数组
  • 特殊类型 NULL(包括尚未赋值的变量)
  • 从空标记生成的 SimpleXML 对象
  1. <?php
  2. $a = '';
  3. $b = 0;
  4. $c = false;
  5. $d = "0";
  6. if ($a)
  7. {
  8. echo "Boolean a为真\n";
  9. }else
  10. {
  11. echo "Boolean a为假\n";
  12. }
  13. if ($b)
  14. {
  15. echo "Boolean b为真\n";
  16. }else
  17. {
  18. echo "Boolean b为假\n";
  19. }
  20. if ($c)
  21. {
  22. echo "Boolean c为真\n";
  23. }else
  24. {
  25. echo "Boolean c为假\n";
  26. }
  27. if ($d)
  28. {
  29. echo "Boolean d为真\n";
  30. }else
  31. {
  32. echo "Boolean d为假\n";
  33. }

执行结果

创建indexhtml2.php

  1. <?php
  2. $a = '';
  3. $b = 0;
  4. $c = false;
  5. $d = "0";
  6. var_dump($a == $b);
  7. var_dump($b == $d);
  8. var_dump($a == $c);
  9. var_dump($b == $c);

执行结果如下:

Integer 整型

整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。八进制数字前需加上 0,十六进制数字前需加上 0x,二进制数字前需加上 0b

  1. <?php
  2. // 十进制数
  3. $a = 1234;
  4. // 带加号的数字
  5. $b = +1234;
  6. // 负数
  7. $c = -123;
  8. // 八进制数 (等于十进制 83)
  9. $d = 0123;
  10. // 十六进制数 (等于十进制 26)
  11. $e = 0x1A;
  12. # 打印结果
  13. var_dump($a);
  14. echo "十进制数:$a\n";
  15. var_dump($b);
  16. echo "带加号的数字:$b\n";
  17. var_dump($c);
  18. echo "负数:$c\n";
  19. var_dump($d);
  20. echo "八进制数:$d\n";
  21. var_dump($e);
  22. echo "十六制数:$e\n";

执行结果如下:

有些情况下,整数会溢出,例如如果给定的一个数超出了 integer 的范围,将会被解释为 float。同样如果执行的运算结果超出了 integer 范围,也会返回 float。

例子如下创建cetest4.php:

  1. <?php
  2. $a = 1234566789;
  3. $b = 9223372036854775807;
  4. $c = 9355555555555555502;
  5. $d = 5555555555555555555 * 1000000;
  6. $d1 = 50000000000000 * 1000000;
  7. var_dump($a);
  8. var_dump($b);
  9. var_dump($c);
  10. var_dump($d);
  11. var_dump($d1);

执行结果:

Float 浮点型

浮点型(也叫浮点数 float,双精度数 double 或实数 real),浮点数字节长途,通常最大值是 1.8e308 并具有 14 位十进制数字的精度(64 位 IEEE 格式),具体字节长度还是根据不同公司的业务需求来设置

创建cetest5.php

  1. <?php
  2. $a = 1.234;
  3. $b = 1.2e3;
  4. $c = 7E-10;
  5. var_dump($a);
  6. var_dump($b);
  7. var_dump($c);

执行结果如下:

String 字符串类型

一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节,PHP 中有 4 中表达方式

  • 单引号

单引号内特殊字符和变量不会被解析

创建cetest6.php

  1. <?php
  2. $a = 'Hello';
  3. // 打印Hello 后换行,再输出清妹(用单引号输出)
  4. echo '$a \n 清妹\n';

执行结果

  • 双引号

双引号内的特殊字符和变量会被解析

  1. <?php
  2. $a = 'Hello';
  3. // 打印Hello 后换行,再输出清妹(用双引号输出)
  4. echo "$a \n 清妹\n";

  • Heredoc

Heredoc 类似与双引号,内部转义字符和变量可以被解析, 其中 EOT 为标识符(可自定义,我这里自定义为了EOX),但是首尾标识符必须相同。开始标识符 EOT 后需换行,结束标识符 EOT 必须独占一行,且前面不许有空格

创建cetest7.php

  1. <<<EOT
  2. 字符串
  3. EOT;
  1. <?php
  2. $a ='Hello' ;
  3. echo <<<EOX
  4. $a 早上好,清妹!
  5. EOX;

执行结果如下:

  • Nowdoc

Nowdoc 类似于单引号,无法解析转移字符和变量,(可自定义,我这里定义为EOD)。

需要在开始标识符加上单引号

  1. <?php
  2. $a ='Hello' ;
  3. echo <<<'EOD'//和 Heredoc 不同点
  4. $a Hello
  5. EOD;

创建cetest8.php

  1. <?php
  2. $a = 'hello';
  3. echo <<<"EOD"
  4. $a ssssssssssssssss
  5. EOD;

执行结果:

再来个总的Heredoc和Nowdoc的实例:

  1. <?php
  2. $a = 'Hello';
  3. $b = '$a 早上';
  4. $c = "美好哦";
  5. $c = <<<EOX
  6. $a \n 我勒个去
  7. EOX;
  8. $d = <<<'EOX'
  9. $a \n $c
  10. EOX;
  11. var_dump($b);
  12. var_dump($c);
  13. var_dump($d);

创建cetest9.php

Array 数组

什么是映射?映射就是把 values 关联到 keys 的类型。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。定义数组可以用 array() 或 [] 来新建一个数组。它接受任意数量用逗号分隔的键(key) => 值(value)对。key 可以是 integer(索引数组)或者 string(关联数组),value 可以是任意类型,如对象、数组

创建cetest10.php

  1. <?php
  2. $a = [
  3. "b" => "bb",
  4. "c" => "cc",
  5. ];
  6. $b = [
  7. "bb",
  8. "cc"
  9. ];
  10. $c = [
  11. "bb",
  12. "cc",
  13. "a" => $a,
  14. "b" => $b,
  15. ];
  16. # 如果没有键名,则数组默认使用从 0 开始的数字键名
  17. var_dump($a);
  18. var_dump($a[0]);
  19. var_dump($b);
  20. # 打印数组不存在的 key 的值时,直接返回 NULL
  21. var_dump($b['b']);
  22. # 数组可以多维嵌套,通过键名可以获取特定值
  23. var_dump($c['a']['b']);

执行结果:

Object 对象

一般我们使用 new 创建一个新的对象。下列中-> 意思是调用实例的方法和属性

  1. <?php
  2. class foo
  3. {
  4. // 创建do函数
  5. function do()
  6. {
  7. echo "冲动的 do";
  8. }
  9. }
  10. # 创建一个实例方法
  11. $f = new foo;
  12. # 调用一个实例的方法和属性
  13. $f->do();

转换为对象

如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass 的实例。如果该值为 NULL,则新的实例为空。 array 转换成 object 将使键名成为属性名并具有相对应的值,除了数字键,不迭代就无法被访问。

创建cetest11.php

  1. <?php
  2. class A
  3. {
  4. }
  5. # a是对象,转换为对象后不发生变化,所以a 等于 $b
  6. $a = new A();
  7. $b = (object)$a;
  8. # 字符串 "A" 转换为对象时,自动生成 scalar 属性
  9. $c = (object)'A';
  10. $d = (object)NULL;
  11. # 数组 ['hello'=>'world'] 转换为对象时,键名 hello 作为属性,键值 world 为属性值
  12. $e = (object)['姓名'=>'清清'];
  13. var_dump($a);
  14. var_dump($b);
  15. var_dump($c->scalar);
  16. var_dump($d);
  17. var_dump($e->姓名);

执行结果如下:

Resource 资源

资源 resource 是一种特殊变量,保存了外部资源的一个引用,如打开文件、数据库连接等,资源是通过专门的函数来建立和使用的

  1. <?php
  2. //打开文件
  3. $file = fopen($filename);
  4. //数据库连接
  5. $db = mysqli_connect();

转换为资源

由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型的值转换为资源没有意义。

释放资源

引用计数系统是 Zend 引擎的一部分,可以自动检测到一个资源不再被引用了(和 Java 一样)。这种情况下此资源使用的所有外部资源都会被垃圾回收系统释放。因此,很少需要手工释放内存。

实例:

首先在当前/root目录下创建 testx.txt文本,再往里面随便输入一点内容,然后保存。成功创建了testx.txt 文本

创建w.php,然后执行

  1. <?php
  2. $fh = fopen('testx.txt','r');
  3. if (is_resource($fh))
  4. {
  5. echo "文件打开成功";
  6. }
  7. else
  8. {
  9. echo "打开文件错误";
  10. }

NULL

特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL。 在一个变量被赋值为 NULL、尚未被赋值、被 unset()会被认为是 NULL

       PHP中删除变量时unset()和null的区别 
       unset()会销毁变量 
       =null并未销毁变量,只是未赋值

  1. $str='';
  2. isset($str);//结果为true,变量值有值,只是值为空
  3. $str=NULL;
  4. isset($str);//结果为false,变量未赋值

转换到 NULL

使用 (unset) 将一个变量转换为 null 将不会删除该变量或 unset 其值。仅是返回 NULL 值而已

创建null.php

  1. <?php
  2. $array_A = array('a'=>'嘻嘻','b'=>'小雨');
  3. $array_B = array('a'=>'丫丫','b'=>'小清');
  4. $array_A['b'] = null;//设置为null
  5. unset($array_B['b']);//销毁变量
  6. print_r($array_A);
  7. print_r($array_B);

执行结果:

类型转换

PHP 是弱语言类型,定义变量的时候不需要制定变量类型,根据上下文自动解成对于的变量类型

算术运算式中,低类型转换为高类型
     • 转换以占用内存空间最大的类型为标准,将其他较小的类型转换为较大的类型,以保证精度不降低。如int型和long型运算时,先把int量转换成long型后再进行运算。
     • 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。

• char型和short型参与运算时,必须先转换成int型

• 赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他
     • 函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参
     • 函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数

创建cetest15.php

  1. <?php
  2. $foo = "0";
  3. var_dump($foo);
  4. $foo += 2;
  5. var_dump($foo);
  6. $foo = $foo + 1.3;
  7. var_dump($foo);
  8. $foo = 5 + "10 xiao";
  9. var_dump($foo);
  10. $foo = 5 + "10 xiao1";
  11. var_dump($foo);

执行结果可以看到,PHP隐式转换的优先级为:浮点型 > 整型 > 字符串:

类型强制转换

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

            •   - (int), (integer)

            • - 转换为整形 integer - (bool), (boolean)

            • - 转换为布尔类型 boolean

            • - (float), (double), (real)

            • - 转换为浮点型 float - (string)

            • - 转换为字符串 string - (array)

            • - 转换为数组 array - (object)

            • - 转换为对象 object - (unset)

            • ​​​​​​​ - 转换为 NULL (PHP 5)

创建cetest.16.php

  1. <?php
  2. // $foo 是整数
  3. $foo = 10;
  4. // 转换成布尔类型
  5. $bar = (boolean) $foo;
  6. echo "$bar\n";

执行结果:

参考链接:https://www.shiyanlou.com/courses/23


我不需要自由,只想背着她的梦

一步步向前走,她给的永远不重


PHP 基本数据类型相关推荐

  1. Postman使用Date数据类型,Postman发送Date类型数据,Postman模拟前端调用

    Postman使用Date数据类型: 在form-data数据类型下,使用 2021/7/7 11:11:00 (yyyy/MM/dd HH:mm:ss) 的数据格式即可 如下: 在json数据格式中 ...

  2. 大数据中用到的新的数据类型bigint、decimal、smallint、tinyint

    在对比oracle数据库和大数据库的时候,发现了几个用以存放数字的新的类型bigint.decimal.smallint.tinyint,为了对比之间的不同,我进行了统计 bigint 可以精确的表示 ...

  3. NumPy — 创建全零、全1、空、arange 数组,array 对象类型,astype 转换数据类型,数组和标量以及数组之间的运算,NumPy 数组共享内存

    NumPy 简介 一个用 python 实现的科学计算包.包括: 1.一个强大的 N 维数组对象 Array : 2.比较成熟的(广播)函数库: 3.用于整合 C/C++ 和 Fortran 代码的工 ...

  4. 【JavaScript总结】JavaScript语法基础:数据类型

    ------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...

  5. 数据类型对应的字节数

    20210622 https://www.icode9.com/content-4-421680.html 32位和64位常用数据结构所占字节数 20210126 1 2 4 8 1248 刚好都是2 ...

  6. tensorflow2.0 基础一 常用数据类型及转换

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_43619065/arti ...

  7. 深入浅出Redis五种基本数据类型

    文章目录 1.String SDS(Simple Dynamic String) 2.RedisDB设计 3.List 4.Hash 5.Set intset 6.ZSet skiplist 1.St ...

  8. TVM自定义数据类型

    TVM自定义数据类型 本文将介绍"自定义数据类型"框架,该框架可在TVM中使用自定义数据类型. 介绍 在设计加速器时,关键是如何近似地表示硬件中的实数.这个问题具有长期的行业标准解 ...

  9. 自主数据类型:在TVM中启用自定义数据类型探索

    自主数据类型:在TVM中启用自定义数据类型探索 介绍 在设计加速器时,一个重要的决定是如何在硬件中近似地表示实数.这个问题有一个长期的行业标准解决方案:IEEE 754浮点标准.1.然而,当试图通过构 ...

  10. 基本数据类型转换规则

    基本数据类型转换规则 前言 一. byte.short.char运算的规则 二. 多种数据类型混合运算规则 三.总结 前言 在这篇文章中,我对Java的基本类型数据类型的混合运算做了一些总结,希望可以 ...

最新文章

  1. SAL-9 获取所有部门当前manager的当前薪水情况,给出dept_no, emp_no以及salary,当前表示to_date='9999-01-01'...
  2. AS4下搭建cacti
  3. 将表数据生成Insert脚本
  4. VC++简单实现工具软件随鼠标移动画线的功能
  5. python的git_Pygit: 用Python实现Git的功能
  6. IP协议详解---Linux学习笔记
  7. 使用泛型实现单例提供者(原创翻译)
  8. 使用 Solid 私有化存储 IPFS 文件哈希值
  9. 这场戏里,到底是谁脏了?
  10. 分治法求数组最大值 c语言,使用分治法求最大子数组的下标。
  11. 【Elasticsearch】父子聚合 can‘t specify parent if no parent field has been configured
  12. java object怎么拿字段_「Java面试秘籍」String不可变,如何理解
  13. php cookie防伪造,技术分享:Cookie 防伪造 防修改
  14. Python Json读写(json模块)(转载)
  15. 4.3 createjs
  16. 张宇1000题高等数学 第八章 一元函数积分学的概念与性质
  17. 三种CSS样式实现(内联样式、内联样式表、外联样式表)
  18. 访问小米路由器内置硬盘
  19. [学习笔记]400G QSFP-DD PAM4 NRZ的成帧和非成帧测试, 400G/200G/100G/50G/40G/25G/10G 7种速率12种模式的端口实现
  20. openoffice将word转pdf中文乱码或消失的坑

热门文章

  1. kafka集群安全化之启用kerberos与acl
  2. VMware Workstation Pro通过ISO系统镜像安装ubuntu-18.04.2
  3. readonly和disabled的区别!
  4. 推荐eclipse插件Properties Editor
  5. Shiro相关文章资料
  6. windows系统路径环境变量
  7. 我弥留之际 - 许立志 (珍藏)
  8. DBProvider 连接 Oracle 10g 数据库的问题
  9. react 合并数组_React 常被忽视的细节。
  10. 每日程序C语言5-斐波那契兔子数