变量
//定义变量:在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方式提交的数据
$_POST:POST提交的数据都会保存在此
$_REQUEST:GET和POST提交的都会保存
$GLOBALS:PHP中所有的全局变量
$_SERVER:服务器信息
$_SESSION:session会话数据
$_COOKIE:cookie会话数据
$_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_VERSION:PHP版本号
PHP_INT_SIZE:整形大小
PHP_INT_MAX:整形能表示的最大值(PHP中整形是允许出现负数:带符号)
在PHP中还有一些特殊的常量,他们有双下划线开始+长两名+双下划线结束,这种常量称之为系统魔术常量:魔术常量的值通常会跟着环境变化,但是用户改变不了
__DIR__ :当前被执行的脚本所在电脑的绝对路径
__FILE__ :当前被执行的脚本所在的电脑的绝对路径(带自己文件的名字)
__LINE__ :当前所属的行数
__NAMESPACE__ :当前所属的命名空间
__CLASS__ :当前所属的类
__METHOD__ :当前所属的方法
数据类型
其他类型转数值的说明
- 布尔true为1,false为0;
- 字符串转数值有自己的规则 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的情况