🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、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) ### 变量定义规范 一般是字母,下划线开头 不能以数字开头 变量区分大小写,函数不区分大小写 **命名方式:** * 驼峰法 * 下划线法 * 每个单词大写