凡是过往,皆为序章

0%

PHP基础知识(二)

继续之前的PHP基础,这次为第二次基础的总结,涉及各种数据类型的介绍等。

一、整型

概念:数据是整数,但根据进制方式不同,有不同的数据格式。

  • 十进制:默认格式。
  • 八进制:起始用0作为标识。
  • 十六进制:起始用0x作为标记。
  • 二进制起始使用0b作为标记。

虽说有多种进制表示,但PHP默认最终输出都以十进制的标准输出。

如果想要保证原来的进制输出,就需要使用printf()函数,和C类似,但不会输出前面的进制标志。

1
2
3
4
5
$int1 = 123;
$int2 = 0123;
$int3 = 0x123;
$int4 = 0b101;
printf('123的十进制是:%d,83的八进制是:%o,291的十六进制是:%x,5的二进制是:%b',$int1,$int2,$int3,$int4);

注意:整型最大的保存PHP_INT_SIZE,(即8个字节),最大值为PHP_INT_MAX,最小值-PHP_INT_MAX-1

附(类型转换函数)

  • 十进制转二进制 decbin() 函数

  • 十进制转八进制 decoct() 函数

  • 十进制转十六进制 dechex() 函数

  • 二进制转十六制进 bin2hex() 函数

  • 二进制转十制进 bindec() 函数

  • 八进制转十进制 octdec() 函数

  • 十六进制转十进制 hexdec()函数

  • 任意进制转换 base_convert() 函数

    1
    2
    $hexadecimal = 'A37334';
    echo base_convert($hexadecimal, 16, 2);//输出 101000110111001100110100

二、浮点型

PHP中浮点数的精度是13~14位,PHP7中浮点数的最大值表示:1.8e308

浮点数采用8个字节存储,存储原理为:符号位+54个数值位+9个指数位

注意:0.3与8.1/2.7比较,计算器不会算出相等的结果。

三、 布尔类型

$res = true;

$res = FALSE 不区分大小写

PHP中尽量不要直接输出bool类型的值。

四、 字符串型

定义方法

  • 单引号''包裹字符

  • 双引号""包裹字符

  • 定界符包裹:使用PHP中的定界符<<<标识符+标识符结尾形式包裹(多行字符串的一种形式)

    • heredoc结构:双引号的一种多行字符串形式

      1
      2
      3
      4
      #EOT并非固定,自己取名即可
      $str = <<<EOT
      这里都是字符串
      EOT;
    • nowdoc结构:单引号的一种多行字符串形式

      1
      2
      3
      4
      #EOT并非固定,自己取名即可
      $str = <<<'EOT'
      这里都是字符串
      EOT;

区别

  1. 单引号是简单的字符串,可以解析少量转义字符:单引号(\‘),反斜杠(\\)。
  2. 双引号功能较多:
    • 里面能解释较多转义符:$符号:(\$),双引号:(\“),反斜杠:(\\),回车换行符:(\r\n),TAB符:(\t)
    • 里面如果有PHP变量,也可以被解析
  3. 定界符中heredoc与双引号效果一致,nowdoc与单引号效果一致,唯一区别:定界符会自动保留格式:即字符串内部有换行符等自动保留。

注意

  1. 双引号解析变量时,系统是有规矩匹配变量的。
    • 变量名不要与其他字符或者数字保留在一起:”$abc”系统会自动识别为$abc,而不是$a。
      • 解决方案1:让变量与后面的内容之间有空格,如”$a bc”,系统则会识别为$a,但是多了一个空格。
      • 解决方案2:使用{}将变量独立包裹起来,如${a}bc,建议使用。
  2. 使用定界符定义多行字符串时的规矩:
    • 定界符内的所有内容(包括注释)都是字符串的内容。
    • 定界符的起始符号之后,结束符号之后不能有任何信息(包括空格,注释)。
    • 结束符必须顶格。

字符串长度

  • 一个英文字符,占一个字节。

  • 一个中文gbk字符,占两个字节。

  • 一个中文utf8字符,占三个字节。

求php字符串的长度,有两个函数:

  • strlen(字符串):求该字符串的“字节数”,也就是占据的字节空间大小。

  • mb_strlen(字符串):求该字符串的“字符”个数。

    需要注意的是,该函数虽为系统函数,但不能直接调用。需要开启php.ini文件里的mbstring模块。

    即可。

五、数组类型

1、概念

数组是多个元素的序列集合

  • 数组由元素组成
  • 数组由下标key和Value组成(键值对)
    • 如果元素下标都是数字:索引数组
    • 如果元素下标都是字符串:关联数组
    • 既有数字又有字符串:混合数组
  • 数组元素访问通过下标实现
  • 数组通常用来保存一组相关的数据,而不是随意搭配

2、使用步骤

1)定义数组

  • 空数组:值为array()或者[]
  • 非空多元素数组:[‘张三’,’男’,30]
  • 指定下标数组:[‘name’=>’张三’,’gender’=>’男’,’age’=>30]

2)添加元素

  • 使用保存数组的变量后加上[],表示一个系统自动指定下标,然后等于某个值。
  • 指定下标[index],可以是字符串。

3)访问元素

  • 指定元素下标
  • 直接使用,表示访问整个数组,但不能用echo输出,数组结构复杂。

4)修改元素

  • 通过下标修改即可。

5)删除元素

  • 使用unset(),然后指定数组变量加上[1],删除指定下标;或删除整个数组。

6)使用for循环语句遍历数组

数组的指针:每一个数组内部,都有一个指针,正常情况下,指针指向数组的某个单元,起初默认位置是指向第一个单元。

php中,有如下函数,可以针对数组指针进行相应操作。

1
2
3
4
5
6
7
8
$arr = array(18,22,12);//定义数组

$re = current($arr);//取得数组当前指针所在单元的值
$re = key($arr);//取得数组当前指针所在单元的键(下标)
$re = next($arr);//将数组的指针后移一位,并取得新位置的值
$re = prev($arr);//将数组的指针前移一位,并取得新位置的值
$re = end($arr);//将数组的指针移到最后一位,并取得新位置的值
$re = reset($arr);//将数组的指针移到最前一位,并取得新位置的值

示例

1
2
3
4
5
6
7
8
$arr = array("a",2=>"b","C","x"=>"d","e");
$len = count($arr);
for ($i = 0; $i < $len; $i++){
$key = key($arr);
$value = current($arr);
echo "$key ----- $value\n";
next($arr);//指针后移
}

得到结果(注意下标规则)

1
2
3
4
5
0 ----- a
2 ----- b
3 ----- C
x ----- d
4 ----- e

3、注意

1、索引数组(纯数字下标)添加元素,默认以当前元素的最大下标开始自动加1.

2、索引数组通常都不会刻意指定下标(从0开始自增长)

3、PHP数组特点

  • 数组元素没有数量限制,数组不限定长度
  • 数组可以动态增加元素
  • 元素的值可以是任何数据类型

4、二维数组

概念:数组中的元素本身也是一个数组。

  • 二维数组的元素都是一个一维数组。
  • 二维数组的第一维下标通常是索引,第二维是关联。

定义步骤

1、定义一维数组,保存到变量。

2、定义一个新数组,将原来的数组保存到新数组元素中。

3、数组访问先通过一维下标找到对应的元素,然后通过二维下标找到更深的元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
#定义一维数组
$p1 = array('name' => '鸣人','skill' => '影分身');
$p2 = array('name' => '佐助','skill' => '千鸟');

#定义二维数组
$p = array($p1,$p2);

#访问元素:通常是访问二维元素
#获取第一元素的名字
echo $p[0]['name'];

#追加一个数组元素
$p[] = array('name' => '小樱','skill' => '治疗术');

六、类型判定和转换

1、类型判定

概念:即对存储数据的变量(本质是数据)进行类型确定。

PHP提供了一套类型判定的函数,以供使用:

  • 函数不需死记硬背,都是is_+数据类型 组成。
    • is_int:判断整型
    • is_float:判断浮点型
    • is_bool:判断布尔型
    • is_string:判断字符串型
    • is_null:判断空型
    • is_array:判断数组型
    • is_resource:判断资源型
    • is_object:判断对象型
  • 函数在操作手册中都有,输入is_即可查看所有。

常用的类型判定:

  • is_numeric:判断数据是否是数值,包括数值型数组,$str='100',为true。
  • is_scalar:是否是标量(基础类型)数据。
  • 类型代表:is_int,是否为整数。

2、类型转换

概念:即将某种不符合的类型转换为目标类型。

  • 自动转换:系统自动转换,方便。
  • 强制转换:通过代码强制转换成目标类型,效率高。

强制转换实现步骤:

1)明确所需要类型

2)强制转换为所需类型

  • 不改变原来数据:在数据前使用(目标类型),如(int)$a
  • 改变原来数据:使用settype(变量,’目标类型’),如settype($a,'bool'),将变量a的类型转为bool类型。
  • 强制转换的类型:资源和NULL类型不能强制转换。

常见的转换逻辑:

1)字符串转为数值

  • 纯数字字符串—>相应数值:’123.1’=>123.1
  • 数值开头但有字母—>保留数字部分:’12a’=>12
  • 小数点开头—>保留第一个小数点及之后的连续数字:’.1.1.a’=>0.1
  • 字母开头 —>0:’a123’=>0

2)其他类型转为布尔:极少数转换为FALSE,基本都是TRUE。以下为FALSE的情况。

  • 整数0转为布尔
  • 浮点数0.0转为布尔
  • 空白字符串和字符串 ‘0’ 转为布尔
  • 空数组array()转布尔:
  • 空类型NULL转布尔
~感谢你请我吃糖果~
-------------本文结束,感谢您的阅读,欢迎评论留言!-------------