php 数据类型

孤者浪人 提交于 2020-02-03 04:20:47

 

更多的转义符见手册如下:整体划分

标量类型 int, float, string, bool

复合类型: array object

特殊类型: null, resouce

整数类型intinteger

 

3种整数表示法

 

十进制写法:123

 

$n1 = 123;

 

八进制写法: 0123

 

$n2 = 0123;

 

十六进制写法: 0x123

 

$n3 = 0x123;

浮点类型floatdoublereal

有两种写法:

$v1 = 1.234;    //带小数点,,就是浮点类型
$v2 = 1.234E3;//含义是:1.234乘以10的3次方,即1234,带E的形式就是浮点数
$v3 = 1234E3;//结果值是1234000,但也是一个浮点数。

浮点数不应直接进行大小比较

因为浮点数在系统内部(cpu级别),很可能都是不精确表达。

要想进行比较,我们只能考虑自己应用中的精度要求的基础上,将其转换为整数进行比较。

1.6678777   1667.8777

通常的做法是:乘以10的精度位数数次方,比如精度要求3位有效数字,则乘以103次方

$v1 = 8.1/3;
echo ("php中,8.1/3结果为:" .$v1);
if($v1 < 2.7 ){
  echo(php中,8.1/3小于2.7);
}
if(round($v1 *1000) == round(2.7 * 1000)){//假设精度要求为3位小数
  echo("php中,8.1/3等于2.7(按3位精度)");
}else{
  echo("php中,8.1/3不等于2.7(按3位精度)")
}

当整数运算的结果超出整数的范围后,会自动转换为浮点数。

  整数的范围,在32位系统下,大约正负20多亿

字符串类型string

js中,虽然有2种字符串表达形式,但也应该理解为是一种字符串:

var  str1 = ‘单引号字符串

var str2 = “双引号字符串”;

但在php中,单引号和双引号字符串,是有不同细节含义的字符串。

php中,有4种字符串形式:

1、单引号字符串:

$s1 = "php34.com";
//单引号字符串:
//可以识别(需要使用)的转义符有: \\   \'
//转义符:就是用来表达 一直特殊符号的字符形式
$str = 'ad\nc"d\'efg:$s1';
echo "<p>$str</p>"

结果:ab\nc"d'efg:$s1

2、双引号字符串:

//双引号字符串:
//可以识别(需要使用)的转义符有: \\   \"  \n  \r  \t  \$
//双引号字符串中,可以自动识别变量(以$开头的连接字符)$str2 = 'ad\nc'd\",\101,\x41,efg:$s1";//自动识别变量$s1echo "<p>$str2</p>"

结果:ab c' d",A,A,efg:php.com

更多的转义符见手册如下:

3、nowdoc(单引号)定界符字符串:

 

//nowdoc(单引号)定界符字符串//说明:ABCD是一个自定义的标识符,放在单引号中//此字符串形式没有可用的转义符$str3 = <<<'ABCD'这里就是字符串的内容,几乎可以写任何东西包括回车,tab符,$符,等等包括单双引号都可以直接写出ABCD;
echo "<p>$str3</P>";

 

4、heredoc(双引号)定界符字符串:

 

//herdoc(双引号)定界符字符串
//说明:ABCD是一个自定义的标识符,放在双引号中(或不用引号)
//在此形式中,其转义符跟双引号字符串字符串几乎差不多(双引号不转义)
$str4 = <<<"ABCDE"
这里就是字符串的内容,几乎可以写任何东西
包括回车,tab符,$符,等等
包括单双引号都可以直接写出,双引号:",\"通常这里可以方便写大段的html,js代码,并输出
ABCDE;
echo "<p>$str4</P>";

 

布尔类型:boolboolean

用于标识某种只有两个状态值的数据:truefalse——吃没吃,去没去,有没有。。。。。

在应用出,我们常常会(需要)直接将一个数据(可能是各种其他类型)当作一个布尔值来进行判断

那么此时其实发生的是:会将该数据隐含转换为布尔值。

最常见的语法形式就是: num == 3   flag = 1

If(flag){}

if(  某数据/变量 ){

.................

}

那么,在php中,其他各种数据,隐含转换为布尔值的时候,会当作false的有:

0

0.0

null

“”

“0”

array(); //空数组

未定义的变量 //当然要尽量避免

其他数据就当作true来看待了。

  看手册:PHP手册〉附录〉类型比较表〉使用 PHP 函数对变量 $x 进行比较

数组类型array

标识一系列数据的“有序排列”的集合体。

php中,数组的下标可以使用整数或字符串。

数字下标常说“索引号”,

字符串下标常说“键名”。

实际上,在php的报错系统中,都叫做“index”,或offset

数组中还可以存储数组,就可以构成“多维数组”的形式。

数组遍历在php中有专门语法:

foreach( 数组名   as   下标变量$k  =>  值变量$v1 {

//这里就是循环体,就可以使用两个变量$k, $v1

}

对象类型object

php中,对象跟js中的有比较大的区别。

通常,js中的对象,有自定定义的(创建的),也有“现成”,比如windowlocation,标签对象。

但:

php中的对象,通常都是指自己定义的对象,纯语法的。

//定义一个“人”类
class Person{
    public $name = "匿名";
    public $age = 18;
    public function introMe(){
        echo "hellol";
        echo "我叫" . $this->name;
        echo ",我今年" . $this->age . "岁";
    }
}$person1 = new Person();//创建了一个"人"类对象:对象类型$person1->name = "小明";//设定这个人的名字$person1->age = 22;//设定这个人的年龄$person1->intorMe();//让这个人自我介绍

资源类型resource

含义:基本上都是指对外部数据的引用。(数据非php代码生成的)
不是PHP语言通过某种语法形式“创造”的数据,而是外部本来就有该数据(比如数据库,文件,图片),PHP只是通过某种语法(或方式)来对其进行某些操作。

空类型null

只是一个计算机中编程领域的“概念”类型,只是为了表达变量所存储的数据的某种特殊情形所创建的概念——没有存数据,或没有存有效的有意义的数据

类型转换

自动转换:

通常自动转换是弱类语言的一个最基本也最方便的一个特征:它会在各种运算中根据运算符的需要也将非该运算符所能处理的数据转换为可以处理的数据。常见情形如下:

if(数据){}:转为bool类型

算术运算符:转为数字类型

连接运算符:转为字符串类型 +  .  

比较运算符:转为布尔类型或数字类型

两边如果有至少一个布尔,则另一边就会转为布尔,并进行比较

否则,就转为数字进行比较

特别常用的一个转换(不管是自动转换还是强制转换),就是字符串转换为数字:

“5” ==>>  5 //整数

“5.5” ==>> 5.5浮点数

“5abc” ==>> 5整数

“5.5ab” ==>> 5.5浮点数

“abc5” ==>> 0整数

“abc” ==>> 0整数

“” ==>> 0

强制转换

就是通过语法来让某数据转换为另一种类型的数据,语法格式为:

(目标类型)数据;

 

$v1 = (int)7.8;$v2 = (float)$v1;echo "v1的值为:$v1,类型为:".getType($v1);echo "v2的值为:$v2,类型为:".getType($v2);

 

注意:我们并不能使用该语法将任意类型的数据,转换为其他任意类型——因为有些类型之间的转换是没有意义的——系统内部也没有定义过该类型转换的规则。

——最常见的转换通常就发生在基本(标量)数据类型之间。

var_dump():能够输出一个变量的完整信息。

getType(类型相关的系统函数

)获取一个变量的类型名称,结果是一个单词(字符串), setType();设置一个变量的类型,语法: setType(变量名,目标类型)

$v1 = (int)7.8;//此时$v1是int类型

$v2 = (floayt)$v1;//此时$v2是float类型,但$v1还是int类型

settye($v1,"float);//此时$v1才转换,float类型

isset(), empty(), unset();

isset()判断一个变量是否存在数据:

empty()判断一个数据是否为空:接近我们的日常观念(没有就是空)

unset():销毁(删除)一个变量。

is_XX类型() 系列函数:判断某个数据是否是某种类型,包括:

is_int(), is_float(), is_numeric(),is_bool(), is_array(), is_scalar():

is_numeric()对:3, 3.5,“3”,“3.14”判断都是true

is_scalar():判断是否为标量类型(即int,float,stirng,bool)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!