3. php数据类型、数据类型转换

1. 数据类型

变量的数据类型分为强数据类型和弱数据类型。 如果一个变量的类型取决于存放值的类型,这种语言称为弱数据类型语言。

如果声明变量是A类型,就不能存放B类型的数据,这种语言称为强数据类型语言。 PHP和js都是弱数据类型。

a.标量类型
类型描述
整型integer一个没有小数的数字。 echo PHP_INT_MAX 整型最大值
浮点数float存放整数和小数
布尔型booleantrue/false
字符串string双单引号字符串

浮点数详解: 由于浮点数转成二进制是乘2正向去整,可能会一直循环下去。所有浮点数保存的值是近似值。

不能用浮点数数做比较

var_dump(0.9 == (1-0.1)); //bool(true) 
var_dump(0.1==(1-0.9)); //bool(false)
复制代码

如果要比较浮点数通过

*bccomp(值1,值2,比较的小数位数)*函数去比较,

如果两个数相等就返回0,值1>值2返回1,否则返回-1

echo bccomp(0.1,(1-0.9),5),'<br>'; //0
echo bccomp(1.123,1.124,2),'<br>'; //0
echo bccomp(1.123,1.124,3),'<br>'; //-1
复制代码

浮点数的范围比整型要大, 理论上,浮点数的最大值是:1.8E+308, 浮点数的精度有效位数是14位

布尔型详解: 打印布尔型使用 var_dump()

字符串详解:

a.1.单引号字符串是真正的字符串,双引号字符串要将变量进行替换 (单引号字符串不需要运算,执行效率高一点)

<?php
    $name='李白';
    echo '名字是$name'; //名字是$name
    echo "名字是$name"; //名字是李白
?>
复制代码

a.2.大括号和$符可以紧挨着结合使用

<?php
    $name='李白';
    echo '$name是名字<br>'; //$name是名字 换行了
    echo "$name是名字<br>"; //报错双引号会认为$后面全是变量名
    echo "$name 是名字<br>"; //李白 是名字 换行了
    echo "($name)是名字<br>"; //(李白)是名字 换行了
    echo "{$name}是名字<br>"; //李白是名字 换行了
    echo "${name}是名字<br>"; //李白是名字 换行了
?>
复制代码

a.3.转义字符(\) 将具有特殊含义的字符转成普通字符

转义字符后面如果跟的是特殊字符,将特殊字符转成普通字符。

如果转义字符后面跟的是普通字符,转义字符不起作用,就是一个普通字符

echo "呵呵:\"哈哈\"",'<br>';    //呵呵:"哈哈"
echo "文件在c:\\";              //文件在c:\
echo '\1\2\3\4\5';              //\1\2\3\4\5
复制代码

但是,要注意转义字符和r、n、t的组合,\r组合表示回车,\n表示换行,\t表示制表符。

a.4 ASC|| 计算机内部使用二进制计算。键盘上的每个字符都有一个编码和他对应,这个编码就是ASC||码。

ASC||码用7位的二进制数来表示,可以表示2^7次方个字符(128个)。

  • ASC||是连续的。连续的字符之间ASC码也是连续的。
  • 小写的字母比大写的大 a>A
  • 小写字母和大写字母之间相差32 a-A=32
echo ord('A'),'<br>'; //65 将字符转成十进制ASC||码
echo chr(65),'<br>'; //A 将十进制的数字转成字符。
复制代码

""可以转义ASC码

echo "\101",'<br>'; //A 8进制ASC码转成字符
echo "\x41",'<br>'; //A 16进制ASC码转成字符
复制代码

a.5 字符串定界符

  • 作用:为输出大量的文本并且不用频繁的转义提供了简单方法
  • 开始和结束的定界符必须一样。名字由字符、数字、下划线组成,不能以数字开头。
  • 开启标识符前面有三个小于号“<<<“。
  • 结束标识符必须顶格写,前面不能有空格和其他字符,标识符的后面也不能有空格。
echo <<<str //开始定界符
    <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>PHP</title>
    </head>
str; //结束定界符
复制代码
<?php
    $name = '哈哈';
    echo <<<str
    呵呵$name
str;
//输出 呵呵哈哈


<?php
    $name = '哈哈';
    echo <<<'str'
    呵呵$name
str;
//输出 呵呵$name
复制代码
b. 复合类型
类型描述
数组array['llj','llk']
对象object{'name':'llj'}

b.1. 数组详细

定义数组:
$stu = array('a','b','c','d','e');

$stu2[] = 'tom';
$stu2[] = 'berry';
复制代码
索引数组:通过下标索引
<?php
    $stu = array('a','b','c','d','e');
    echo $stu[0],'<br>'; //a
    echo $stu[1],'<br>';
?>
复制代码
关联数组:元素的值与字符串有某种关联
<?php
    $stu = array('name'=>'李白','sex'=>'男','age'=>'21');
    echo $stu['name'],'<br>';
    echo $stu['sex'],'<br>';
    echo $stu['age'],'<br>';
?>
复制代码

键值对:数组的下标可以称为“键”,下标和对应的值称为“键值对”

数组下标可以修改 1=>'a'

extract() 从数组中的键值对转成普遍变量

$stu=array('id'=>1,'name'=>'tom');
extract($stu);
echo $id,'<br>',$name;

// 输出: 1 tom
复制代码

a 按照元素的键值关系分为:

  • 索引数组:通过元素的位置坐下标。
  • 关联数组:通过字符串做下标,键和值存在某种关联。
  • 注意:不能按照键的数据类型来判断是否是索引数组或关联数组,必须看下标和值关联关系,$stu=array(1=>’tom’,2=>’berry’)也属于关联数组。因为下标不是表示值的位置。

b 按照数组的结构分

  • 一维数组
  • 多维数组:二维以上
d.特殊类型
类型描述
资源resource
null

资源:

  • PHP引用的外部数据称为资源
  • 资源只能获取,不能创建
  • 资源也是由类别的,比如连接资源,数据流资源
<?php
    $list = mysql_connect('localhost','root','adminllj');
    var_dump($list); //resource(3) of type (mysql link) 

    echo '<br>';

    $fp = fopen('./.htaccess','r');
    var_dump($fp); //resource(5) of type (stream)
?>
复制代码

NULL:

  • 表示没有定义的变量
  • NULL不区分大小写。
  • 调用一个没有返回值的函数,默认返回NULL
function fun() {}
var_dump(fun());
复制代码
2. 进制转换

计算机中支持 十进制、二进制、八进制、十六进制 (逢二、八、十、十六进1) 十六进制: 0-9,A,B,C,D,E,F (F=15)

例题1:十进制123,写出表达式(斜体表示次方) 123 = 1X100 + 2X10 + 3 123 = 1X102+2X101+3X100

例题2:八进制123,转成十进制 123 = 1X82+2X81+3X80

例题3:十六进制FF,转成十进制 FF = 15X161+15X160 = 255

例题4:二进制1001转成十进制 1001 = 23+20 = 9

php进制转换方法

进制 | 函数 | 结果 ---|--- 十进制转成二进制 | decbin(9) | 1001 二进制转成十进制 | bindec(1001) | 9 十进制转成八进制 | decoct(10) | 12 十进制转成十六进制 | dechex(10) | a

echo decbin(9),'<br>'; //1001
echo bindec(1001),'<br>'; //9
echo decoct(10),'<br>'; //12
echo dechex(10),'<br>'; //a
复制代码
3. 数据类型转换

数据类型是数据在内存中存储的结构,和建立在该数据结构上的操作算法的集合。

这就意味着不同的数据类型运算操作可能不一样。不同类型的数据在运算过程中要注意类型的转换。

a. 自动转换

运算过程中需要的数据类型和提供的数据类型不一致。

<?php
    $num = 10;
    if($num){
        echo '把数字型转换成布尔型';
    }
    
    echo '<br>';
    
    echo '10aa' + '20bb'; //30  把字符串转成数字
    
    echo '<br>';
    
    $num0 = 'abc';
    $num1 = 0;
    if($num0 == $num1){
        echo '把$num0转换成了数字0';
    }
?>
复制代码
b. 强制转换

语法:(数据类型)数据

示例:

<?php
    $num = 10;
    var_dump((bool)$num);  //bool(true) 转换成布尔
    
    echo '<br>';

    $num0 = 12.5;
    echo (int)$num0; //12 浮点数转成整数

    echo '<br>';
?>
复制代码
c. 其他数据类型和bool型之间的转换规律
  • 字符串转换规律:非0非空为true,0或空为false
  • 数字转换规则:0为假,非0为真。
//字符串和bool的转换规律
var_dump((bool)'abcd');		//true
var_dump((bool)'');			//false
var_dump((bool)'0');		//false
var_dump((bool)'0.0');		//true
var_dump((bool)'00');		//true
var_dump((bool)'false');	//true
var_dump((bool)'null');		//true

---

//数字和bool的转换规律
var_dump((bool)1);			//true
var_dump((bool)0);			//false
var_dump((bool)-10);		//true
var_dump((bool)1.1);		//true
var_dump((bool)0.0);		//false
var_dump((bool)-1.1);		//true

---

//数组和bool的转换规律
var_dump((bool)array());	//false
var_dump((bool)array(1));	//true
var_dump((bool)array(false));//true

---

//数组和null的转换规律
var_dump((bool)null);		//false
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值