风之旅人 Android Dev Engineer

2.PHP变量和数据类型

2019-10-09
PHP

变量

//定义变量:在PHP中不需要任何关键字定义变量(赋值)
$var1;		//定义变量
$var2 = 1;	//定义同时赋值

//访问变量
echo $var2;	//通过var2变量名字找到存储的内容1,然后输出

//修改变量
$var2 = 2;
echo '<hr/>',$var2;

//删除变量:使用unset(变量名字)
unset($var2);
//echo $var2;

//变量命名规则
$var_1;$var_var_1;$_var1;	//正确格式

$var;

//中文变量
$中国 = 'China';

可变变量

//定义两个变量
$a = 'ccc';
$b = 'bb';
$ccc = 'b';

echo $$a;//b

预定义变量

预定义变量:提前定义的变量,系统定义的变量,存储许多需要用到的数据(预定义变量都是数组)

$_GET获取所有表单以get方式提交的数据
$_POSTPOST提交的数据都会保存在此
$_REQUESTGET和POST提交的都会保存
$GLOBALSPHP中所有的全局变量
$_SERVER服务器信息
$_SESSIONsession会话数据
$_COOKIEcookie会话数据
$_ENV环境信息
$_FILES用户上传的文件信息

变量传递

值传递:将变量保存的值赋值一份,然后将新的值给另外一个变量保存(两个变量没有关系); 引用传递:将变量保存的值所在的内存地址,传递给另外一个变量:两个变量指向同一块内存空间(两个变量是同一个值) $新变量 = &$老变量;

//值传递
$a = 10;
$b = $a;
$b = 5;
echo $a,$b,'<br/>';

//引用传递
$c = 10;
$d = &$c;
$c = 5;
echo $c,$d,'<br/>';

常量

//使用函数定义常量:define
define('PI',3.14);

//使用const关键字定义
const PII = 3;

//定义特殊常量
define('-_-','smile');
//const -_- = 'smile';	//错误

//使用常量
echo PI;

//echo -_-;				//特殊符号不能直接使用
echo constant('-_-');


//系统常量
echo '<hr/>',PHP_VERSION,'<br/>',PHP_INT_SIZE,'<br/>',PHP_INT_MAX;

//魔术常量
echo '<hr/>';
echo __DIR__,'<br/>',__FILE__,'<br/>',__LINE__,'<br/>';
echo __LINE__;

系统常量

系统常量:系统帮助用户定义的常量,用户可以直接使用

常用的几个系统常量
PHP_VERSIONPHP版本号
PHP_INT_SIZE整形大小
PHP_INT_MAX整形能表示的最大值PHP中整形是允许出现负数带符号

在PHP中还有一些特殊的常量他们有双下划线开始+长两名+双下划线结束这种常量称之为系统魔术常量魔术常量的值通常会跟着环境变化但是用户改变不了
__DIR__ 当前被执行的脚本所在电脑的绝对路径
__FILE__ 当前被执行的脚本所在的电脑的绝对路径带自己文件的名字
__LINE__ 当前所属的行数

__NAMESPACE__ 当前所属的命名空间
__CLASS__ 当前所属的类
__METHOD__ 当前所属的方法

数据类型

其他类型转数值的说明

  1. 布尔true为1,false为0;
  2. 字符串转数值有自己的规则 2.1 以字母开头的字符串,永远为0; 2.2 以数字开头的字符串,取到碰到字符串为止(不会同时包含两个小数点)
//创建数据
$a = 'abc1.1.1';
$b = '1.1.1abc';

//自动转换
echo $a + $b;		//算术+运算,系统先转换成数值类型(整型和浮点型),然后运算

//强制转换
echo '<br/>',(float)$a,(float)$b;

//判断数据类型
通过一组类型判断函数来判断变量最终返回这个变量所保存数据的数据类型相同结果为true失败为false):是一组以is_开头后面跟类型名字的函数is_XXX(变量名)
Bool类型不能用echo来查看可以使用var_dump结构查看
Var_dump(变量1,变量2)
echo '<hr/>';
var_dump(is_int($a));				//false
var_dump(is_string($a));			//true

//获取以及设定数据(变量)的类型
//Gettype(变量名):获取类型,得到的是该类型对应的字符串
//Settype(变量名,类型):设定数据类型:与强制转换不同
//1、	强制转换(类型)变量名,是对数据值复制的内容进行处理(不会处理实际存储的内容)
//2、	settype会直接改变数据本身

echo '<hr/>';
echo gettype($a),'<br/>';

//设置类型
var_dump(settype($b,'int'));
echo gettype($b),$b;
整数类型和进制转换
在PHP中提供了四种整型的定义方式十进制定义二进制定义八进制定义和十六进制定义   同java
$a = 120;		//10进制
$a = 0b110;	//2进制
$a = 0120;	//8进制
$a = 0x120;	//16进制

十进制转二进制 不管得到的结果如何,需要补足32位:前面补0:00000000 00000000 00000000 00001010

<?php
	//简单数据类型:整型、浮点型和布尔型
	//定义4种整型数据
	$a1 = 110;
	$a2 = 0b110;
	$a3 = 0110;
	$a4 = 0x110;

	echo $a1,'~',$a2,'~',$a3,'~',$a4,'<hr/>';	//默认的PHP输出数值都会自动转换成10进制输出

	/*
	十进制转二进制
	10 ---》8 + 2 ---》2^3 + 2^1 ---》从二进制右侧开始,按照对应的指数次位置补1,没有的补0

	从最后侧开始:00000000 00000000 00000000 00001010

	二进制转十进制
	01101011 ==>从右侧开始 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 + 0*2^4 + 1*2^5 + 1*2^6 + 0*2^7
	== 1 + 2 + 0 + 8 + 0 + 32 + 64 + 0 == 107
	*/

	/*
	PHP中不需要用户这么复杂的去计算,提供了很多的函数进行转换
	Decbin():十进制转二进制
	Decoct():十进制转八进制
	Dechex():十进制转十六进制
	Bindec():二进制转十进制
	*/

	//利用进制函数运算
	var_dump(decbin(10));// string(4) "1010"
浮点类型

注意浮点数的判断!

//浮点数
$f1 = 1.23;
$f2 = 1.23e10;
$f3 = PHP_INT_MAX + 1;		//整型超过自身存储的大小之后会用浮点型存储

var_dump($f1,$f2,$f3);

//浮点数判断
$f4 = 0.7;
$f5 = 2.1;
$f6 = $f5 / 3;

//var_dump($f4 == $f6);
布尔类型
	//Empty():判断数据的值是否为“空”,不是 NULL,如果为空返回 true,不为空返回false
	//Isset():判断数据存储的变量本身是否存在,存在变量返回true,不存在返回false
	$b1 = true;
	$b2 = FALSE;

	var_dump($b1,$b2);

简单说明浮点数为什么同样的字节数存储数据,但是却能表示更大的数据呢? 00000000 00000000 00000000 00000000 👉11111111 11111111 11111111 1111111 (整形最大值:所有位都是有效数据)
浮点数:红色7位算的结果是10的指数,后面三个字节存储表示具体数值 00000000 00000000 00000000 00000000 👉 11111111 11111111 11111111 1111111
尽量不用用浮点数做精确判断:浮点数保存的数据不够精确,而且在计算机中凡是小数基本上存的都不准确

var_dump(0.1==(0.2/2));//bool(true)
var_dump(0.7==(2.1/3));//bool(false)

可见结果不一定对。

特别注意empty()为true的情况 data_type


相关文章

上一篇 1.PHP环境搭建

评论