## 一、PHP基本语法
1. html和php混编
2. 语句以 ; 结尾(一个页面少一个分号,整个页面不运行)
3. 定义变量
4. 变量数据类型不是固定的,根据赋值类型而变化
5. php是弱数据类型
## 二、8种数据类型
1. 基本类型:整型,浮点型,布尔型,字符串型
2. 复合类型:数组,对象
3. 特殊类型:null,资源
### 整型
1. 整数值可以用十进制,十六进制(0x开头),八进制(0开头)表示
~~~
//进制转换
a=10,b=11,c=12,d=13,e=14,f=15
0x1a=10+1*16
0123=3+2*8+1*8*8
~~~
2. php的整数都是有符号的
3. 整型长度和平台有关,通常4字节(PHP_INT_SIZE),最大值(PHP_INT_MAX)
1个字节8位,4个字节32位,有一位是符号位,所以最大值是2的31次方-1
4. 超出整型的数,自动变为浮点型
### 布尔值
1. true,false不区分大小写
2. 非0,非空字符串都是true
3. 以下为false
4. 布尔值false自身
* 整型0
* 浮点型0.0
* 空字符串,以及字符串“0”
* 不包括任何元素的数组
* 不包括任何成员变量的对象
* 特殊类型null
* 从空标记生成的simplexml对象
### 浮点型
1. 浮点型也叫双精度
2. 浮点数字长和平台有关,一般是1.8e308,14位十进制精度
3. 小数的精度从第一个非0开始,到最后一个数会四舍五入
1. 浮点数运算中进行比较:
* 使用round将其转换为整数,再比较
~~~
if(round($f*10000)==round(2.8*10000))
~~~
* 使用绝对值的相差值,和一个极小的值比较
~~~
if(abs($f-2.8)<0.00000000001)
~~~
*如果2个浮点数是直接赋值的数,可以直接比较
### 字符串类型
1. PHP字符串最大2GB
2. 字符串常见定义方法:
* 单引号
1)单引号不会解析$
2)效率比较高
* 双引号
1)会解析$
2)执行效率没有' '高
3)在" "解析含有特殊字符或数组,要用{}括起来
~~~
$book="书名是:{$arr['name']}"
~~~
* heredoc语法结构(类似双引号)
1)会解析$
2)后面的定界值HTMLCON可以任意,一般大写
3)HTMLCON后面不能有空格等任何内容
4)最后的HTMLCON; 要顶格写,这一行前面不能有任何内容
~~~
//一般用户返回大段的html代码
$div==<<<HTMLCON
<h1>hello,................</h1>$num
HTMLCON;
~~~
* nowdeo语法结构(类似单引号)
1)不解析$
~~~
$div=<<<'HTMLCON'
..................
HTMLCON
~~~
1. 如果是双引号,会解析转义符
~~~
\n \r \t \f \\ \$ \" \e \v
//十六进制的值对应的ascii字符 ,8进制对应的ascii字符 如:
\x40 //16进制 @
\132 //十进制 Z
\101 //8进制 A
~~~
### 编码
* ascii码:最早126个,表示图形a-z,@等各种符号
* 后来更多字符,没法表示,就产生gbk,gb2312,utf8,unicode等
1. PHP执行双引号,如果发现有$变量
1. 先会找到$变量的值
2. 如果值的后面有(),尝试去执行这个函数
3. 如果没有函数,会报错
~~~
echo "{$abc()}";
~~~
**原则:**
* 考虑效率,用单引号
* 如果返回的是大段html代码,用heredoc,nowdoc
* 如果拼接sql语句,里面有大量变量,用双引号
* * * * *
### 数据类型转换
* 自动转换
* 强制转换
#### 自动转换
进行运算的时候,数据自动向高进度转换
**布尔值>int>float**
int+boolen=int
boolen+float=float
#### 强制转换
1. setType(变量名,类型); 任意类型(string,null,obejct,array,number,boolean,float)
2. (类型)变量
3. intval(变量),floatval(变量),strval(变量),booleanval(变量),doubleval(变量);
~~~
$a=10;
setType($a,"array");
var_dump($a);
~~~
~~~
$a=10;
$b=(string)$a; //$a的类型不变
var_dump($b);
~~~
~~~
$a=10;
$b=floatval($a); //不改变变量本身的类型
var_dump($b);
~~~
**3种转换类型的选择**
* 是否要改变本身的类型setType
* val方式没有数组等方法,没有复杂类型转换
### 变量相关函数
* isset();是否设置,并且不是null
* unset();销毁变量
* empty(); 变量是否为空,可以判断0,空的""
* gettype();返回某个变量对应的数据类型
* is_int(),is_array(),is_bool,is_null,is_long,is_object,is_string
![](https://box.kancloud.cn/8486fa03877f962ab27aebc4fbd7139f_167x238.png)
* * * * *
**empty和isset区别:**
如果不能接受0,就用empty
isset配合&&数据合法性
只要是表单,提交后都是string,使用strpos,查找字符串首次出现的位置
is_numeric判断是否数字或是数字字符串
~~~
//isset
$a=10;
if(isset($a)){
echo '$a存在,并且不为null';
}else{
echo "不存在";
}
~~~
~~~
//unset
$a=10;
unset($a);
if(isset($a)){
echo '$a存在,并且不为null';
}
~~~
~~~
//gettype
$a=444.333;
echo gettype($a);
~~~
* * * * *
**细节:**
unset()
unset销毁指定变量
如果在函数中使用unset,销毁的只是局部变量
~~~
$a=111;
function box(){
global $a;
unset($a);
$a=333;
//unset($a);
}
box();
echo $a; //333
~~~
### 全局变量GLOBALS
~~~
$book='西游记';
var_dump($GLOBALS);
~~~
在函数中销毁全局变量$GLOBALS,直接干掉存储变量的空间
~~~
$book='西游记';
function box(){
unset($GLOBALS['book']);
}
box();
echo $book;
~~~
**empty**
1.非空,或非0返回false
2.否则返回true 0,"0",false,null,array(),以及没有任何属性的对象
### 引用传递和值传递
PHP默认都是值传递,但也可以指定引用传递&
引用传递,指向的是同一个内存地址
对象,数组也是按值传递
~~~
$a=10;
$b=&$a;
$b=20;
echo $a;
~~~
![](https://box.kancloud.cn/b6b7c0fcc5832a8f06c5ecd5543e0728_443x321.png)
### 变量定义规范
一般是字母,下划线开头
不能以数字开头
变量区分大小写,函数不区分大小写
**命名方式:**
* 驼峰法
* 下划线法
* 每个单词大写