PHP学习笔记 PHP基本语法——PHP数据类型

一、了解PHP数据类型

数据类型是计算机编成重要的组成部分,大部分编成语言都是数据类型敏感的,具备相同类型的数据才能彼此赋值操作等,而PHP最初源于 Perl 语言,与 Perl 相似,PHP语言是一种弱类型检查的语言。在PHP中,变量或常量的数据类型由程序的上下文决定。

PHP 的数据类型可以分为三大类,分别是标量数据类型、复合数据类型和特殊数据类型。

二、PHP标量数据类型

标量数据类型是数据结构的最基础单元,只能存储一个数据。在 PHP 中的标量数据类型分为四种:boolean(布尔型)、string(字符串)、integer(整型)、float(浮点型)。

  • boolean(布尔型)boolean表达了TRUE或FALSE,即“真”或“假”。

  • string(字符串)它是一系列字符。

  • integer(整型)用于存储整数,可以是正整数也可以是负整数。

  • float(浮点型)浮点数是包含小数部分的数。

boolean 布尔型

布尔型是PHP中的标量类型之一,这是最简单的类型。boolean 可以为 truefalse

要指定一个布尔值,使用常量 truefalse直接赋值(不区分大小写)。

<?php
$test = True; // 设置 $test 为 TRUE
var_dump($test);

如果想查看某个表达式的值和类型,可以使用函数var_dump()。

PHP进行逻辑运算、比较运算等,返回的都是boolean 值,它是构成PHP逻辑控制的判断依据。

<?php
$test = '测试布尔';
// 它检测两个变量是否相等,并返回一个布尔值
if ($test == "测试布尔") {
    echo '返回true';
}
if ($test) {
    echo '返回true';
}

转换为布尔值

当运算符,函数或者流程控制结构需要一个 boolean 参数时,该值会被自动转换。

其他类型作为boolean时,以下值被认为是false

  • 布尔值 false 本身
  • 整型值 0(零)及 -0 (零)
  • 浮点值 0.0(零)-0.0(零)
  • 空字符串,以及字符串"0"
  • 不包括任何元素的数组
  • 特殊类型 NULL(包括尚未赋值的变量)
string 字符串

一个字符串 string 就是由一系列的字符组成字符序列

在 PHP 中,定义字符串有三种方式表达,分别是单引号方式、双引号方式、定界符方式。

单引号

声明一个字符串最简单的方式,就是用单引号括起来。

示例代码如下:

<?php
    $str= 'PHP 教程';      
    echo $str;

特点:

  • 在单引号引起来的字符串中不能再直接包含单引号,如需在单引号字符串中表达一个单引号则需要用反斜线(\)转义。要表达一个反斜线自身,则用两个反斜线(\\)。除了上面两种形式以外,其它任何方式的反斜线都会被当成反斜线本身。例如 \n 或者 \r等特殊转义序列并不代表任何特殊含义,就单纯是这两个字符本身。
  • PHP 不会解析单引号字符串中的变量和特殊字符的转义序列,而是将他们原样输出。
  • 如果字符串中没有特别需求,应使用单引号定义字符串,因为单引号的效率会更高

双引号

如果用双引号(")括起字符串,就是双引号形式的字符串。

示例代码如下:

<?php
    $str= "PHP 教程";      
    echo $str;

特点:

  • 在双引号引起来的字符串中不能再直接包含双引号,如需在双引号字符串中表达一个双引号则需要用反斜线(\)转义。

  • 用双引号定义的字符串中变量会被解析

  • 用双引号定义的字符串中特殊字符的转义序列将会被解析

双引号的字符串, 将对以下特殊的字符序列进行解析:

序列含义
\n换行(ASCII 字符集中的 LF 或 0x0A (10))
\r回车(ASCII 字符集中的 CR 或 0x0D (13))
\t水平制表符(ASCII 字符集中的 HT 或 0x09 (9))
\v垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))
\eEscape(ASCII 字符集中的 ESC 或 0x1B (27))
\f换页(ASCII 字符集中的 FF 或 0x0C (12))
\\反斜线
\$美元标记
\"双引号
\[0-7]{1,3}符合该正则表达式序列的是一个以八进制方式来表达的字符,which silently overflows to fit in a byte (e.g. “\400” === “\000”)
\x[0-9A-Fa-f]{1,2}符合该正则表达式序列的是一个以十六进制方式来表达的字符
\u{[0-9A-Fa-f]+}匹配正则表达式的字符序列是 unicode 码位, 该码位能作为 UTF-8 的表达方式输出字符串

定界符

表达字符串的第三种方法是用定界符语法 :<<<。在该运算符之后要提供一个标识符,然后换行。接下来是字符串 string 本身,最后要用前面定义的标识符作为结束标志,结束时所引用的标识符必须在该行的第一列。并且后面除了分号;不能包含任何其他的字符,空格及空白制表符都不可以。标识符的命名也要像其它标签一样遵守 PHP 的规则:只能包含字母、数字和下划线,并且必须以字母和下划线作为开头。

示例代码如下:

<?php
$str = <<<EOT
PHP 教程
EOT;

特点:

  • 定界符文本除了不能初始化类成员,在 PHP 5.3.0 以后,也可以用来初始化静态变量和类的属性和常量。
  • 在定界符文本中也可以使用的转义符号,定界符中的变量也会被解析。
  • 从 PHP 5.3.0版本以后开始,可以在开始标识符名称两边加上双引号或单引号。加上双引号的结构叫 Heredoc 结构,类似于双引号字符串,也是默认结构。使用单引号的结构叫Nowdoc 结构,类似于单引号字符串。Nowdoc 结构很适合于嵌入 PHP 代码或其他大段文本而无须对其中的特殊字符进行转义的字符串。
  • 从PHP 7开始,可以在双引号字符串或定界符字符串中,支持使用“\u{xxxxx}”来解析unicode字符
Integer 整型

整型是集合 {…, -2, -1, 0, 1, 2, …} 中的某个整数。整型值 Integer可以使用十进制,十六进制(前缀0x),八进制(前缀0)或二进制(前缀0b)表示,也可以在前面加上可选的符号(- 或者 +)。

示例如下:

<?php
$a = 1234; // 十进制数
$a = 0123; // 八进制数 (等于十进制 83)
$a = 0x1A; // 十六进制数 (等于十进制 26)
$a = 0b11111111; // 二进制数字 (等于十进制 255)
$a = 1_234_567; // 整型数值 (PHP 7.4.0 以后)

从 PHP 7.4.0 开始,整型数值可能会包含下划线 (_),提供了更好的阅读体验,而这些下划线在展示的时候,会被 PHP 过滤掉。

整型数的字长和平台及PHP的版本有关,但是PHP不支持无符号整数,32 位平台下整形最大值为2 147 483 647(231 -1),整型的最小值为-2 147 483 648。64 位平台下的最大值是9223372036854775807(大约9E18),64 位平台下的最小值是-9,223,372,036,854,775,808。如果给定的一个数或者执行的运算结果超出了Integer这个范围,都将会被解释为float。

Integer值的字长可以用常量 PHP_INT_SIZE来表示, 最大值可以用常量 PHP_INT_MAX来表示, 最小值可以用常量 PHP_INT_MIN 表示。

<?php
# 32 位系统下的整数溢出
$large_number = 2147483647;
var_dump($large_number);                     // int(2147483647)

$large_number = 2147483648;
var_dump($large_number);                     // float(2147483648)

$million = 1000000;
$large_number =  60000 * $million;
var_dump($large_number);                     // float(60000000000)
# 64 位系统下的整数溢出
$large_number = 9223372036854775807;
var_dump($large_number);                     // int(9223372036854775807)

$large_number = 9223372036854775808;
var_dump($large_number);                     // float(9.2233720368548E+18)

$million = 1000000;
$large_number =  60000000000000 * $million;
var_dump($large_number);                     // float(6.0E+19)
float浮点型

浮点数是包含小数部分的数。实际上 双精度(double)和float是相同的。由于一些历史原因,这两个名称同时存在。浮点数的字长也是和平台相关的,通常最大值是 1.8e308 并具有 14 位十进制数字的精度。可以用以下任何语法定义:

示例如下

<?php
$a = 0.123; // 正常表示
$b = 1.2e3; // 使用科学计数法表示,相当于1.2*10的3次方。
$c = 5E-10; // 使用科学计数法表示,相当于5*10的-10次方。
$d = 1_234.567; // 从 PHP 7.4.0 开始支持
?>

永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者gmp()函数。

<?php
echo "<br/>";
$sum = 123.90;
$a  = 100.30;
$b  = 20.30;
$c  =  3.30;
var_dump($sum, ($a+$b+$c));
var_dump($sum==($a+$b+$c));
echo "<br/>";
var_dump(0.58*100,58);
var_dump(0.58*100==58);
# 运行一下试试看

产生这样的原因是计算机内部对部分浮点数不能准确地用二进制表示,就像我们不能用十进制准确表示10/3一样。所以对于浮点数来计算金额这些敏感的数据,推荐使用PHP的bc函数。

三、复合数据类型

复合数据类型包括数组(Array)和对象(Object)。

Array 数组

可以用 array() 函数来新建一个数组。它接受任意数量用逗号,分隔的 键(key) => 值(value)对。按照数组的维度划分,可以有一维数组、二维数组和多维数组。

示例代码如下:

array(  
    key =>  value
     , ...
);
// 键(key)可是是一个整数 integer 或字符串 string
// 值(value)可以是任意类型的值
<?php
    $arr = array('name' => 'php数组', 'name2' => 'php数组2');
    echo "<pre>";
    var_dump($arr);
	$arr = array('php数组', 'php数组2');
    echo "<pre>";
    var_dump($arr);
// <pre> 是一个 HTML 标签,用来格式化输出内容

拓展知识:

  • 自 5.4 起可以使用短数组定义语法,用 [] 替代 array()

  • 最后一个数组单元之后的逗号可以省略。

  • key 可以是 integer 或者 string。value 可以是任意类型。

  • 如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。

  • 如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。

  • 此外 key 如果不是 integer 或者 string 会有如下的强制转换:

    • 包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
    • 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8
    • 布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0
    • Null 会被转换为空字符串,即键名 null 实际会被储存为 ""
    • 数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type
  • 数组单元可以通过 array[key] 语法来访问。

    <?php
    $arr = array('name' => 'php数组', 'name2' => 'php数组2');
    var_dump($arr["name"]);
    var_dump($arr{"name"});
    # 方括号和花括号可以互换使用来访问数组单元
    
  • 自 PHP 5.4 起可以用直接对函数或方法调用的结果进行数组解引用,在此之前只能通过一个临时变量。

    <?php
    function getArr() {
        return array(1, 2, 3);
    }
    // 在 PHP 5.4 开始
    $val = getArr()[1];
    // 以前
    $tmp = getArr();
    $val = $tmp[1];
    
  • 自 PHP 5.5 起可以直接对一个数组原型进行数组解引用。

  • 访问一个未定义的数组键名同访问任何未定义变量结果是一样的:会导致 E_NOTICE 级别错误信息,其结果为 null

  • 数组可以通过方括号的语法新建/修改;

    $arr[key] = value;
    $arr[] = value;
    

    如果 $arr 还不存在,将会新建一个,这也是另一种新建数组的方法(不推荐这样使用)。如果数组存在,key也存在就会替换原key对应的值。

    <?php
    $arr = array('name' => 'PHP');
    $arr['name'] = 'php7';
    var_dump($arr);
    $arr['name2'] = 'php8';
    var_dump($arr);
    $arr[] = 'php未来';
    var_dump($arr);
    
  • 要删除某键值对,对其调用 unset()函数。

    <?php
    $arr = array('name' => 'PHP','name2' => 'php2');
    var_dump($arr);
    unset($arr['name2']);
    var_dump($arr);
    

更多有关数组的知识,会在后面整理。

Object 对象

在支持面向对象的语言中,可以把各个具体事物的共同特征和行为抽象成一个实体,称之为一个“类”,而对象是类使用 new 关键字实例化后的结果。

  • 对象是存储数据和有关如何处理数据的信息的数据类型。
  • 在 PHP 中,必须明确地声明对象。
  • 首先我们必须声明对象的类。对此,我们使用 class 关键词。类是包含属性和方法的结构。

示例如下:

<?php
class testClass //使用 class 声明一个类
{
    function test() //类的方法
    {
        echo "测试对象调用方法"; 
    }
}
// new 对象 并调用 类里的方法。
$testObj = new testClass;
$testObj->test();

更多有关面向对象的知识,会在后面整理。

四、特殊数据类型

在 PHP 中,有用来专门提供服务或数据的数据类型,它不属于上述标准数据类型中的任意一类,因此也被称为特殊数据类型,主要包括 NULL 和资源数据类型。

NULL

NULL 在 PHP 中是一种特殊的数据类型,表示一个变量没有值,NULL 只有一个值,就是不区分大小写的常量 null

当满足下列条件时,变量的值为 NULL:

  • 变量被指定赋值为 null。
  • 变量在没有被赋值前为 NULL。
  • unset() 函数删除后,这个变量值也为 NULL。
Resource 资源类型

资源 resource 是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。

使用资源类型变量包含:打开的文件、数据库连接、图形画布区域等的特殊句柄,并由程序员创建、使用和释放。任何资源在不需要时都应该被及时释放,如果程序员忘记了释放资源,系统将自动启用垃圾回收机制,以避免内存的消耗殆尽。因此,很少需要使用某些 free-result 函数来手工释放内存。

注意: 持久数据库连接比较特殊,它们不会被垃圾回收系统销毁。

示例:

<?php
    header("content-type:text/html;charset=utf-8");//设置编码,解决中文乱码
    $file = fopen("test.txt", "rw");//打开test.txt文件
    var_dump($file);

运行结果:

resource(3) of type (stream)

五、提示

(。◕ˇ∀ˇ◕)遇见就是缘分,如果觉得对自己有帮助,喜欢的可以收藏或者留下一个谢谢支持。
关注我编程不迷路。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值