@TOC
变量
-
定义变量不需要规定数据类型
-
变量名以 “$” 符号开头,只能包含数字、字母、下划线,不能数字开头
-
使用unset函数清除变量
-
预定义变量
$_GET:存储以get方式提交的表单 $_POST:存储以post方式提交的表单 $_REQUEST:存储以get或post方式提交的表单 $GLOBALS:存储PHP中所有全局变量 $_SERVER:服务器信息 $_SESSIOON:session会话信息 $_COOKIE:cookie会话信息 $_ENV:环境信息 $_FILES:用户上传的文件信息
-
可变变量:一个变量的内容可作为另一变量的名字
$a='b'; $b='bb'; // $$a =='bb'
变量赋值与值传递
$a = 1;
$b = $a; //值传递,将a值复制一份给b
$c = &$a; //引用传递,指向同一个值(内存空间)
常量
//使用define函数定义
define('PI',3.14,(false)); //最后的false表示大小写敏感,可省略;若定义为true则大小写不敏感
//使用const关键字定义
const PII = 3;
//使用define函数定义特殊常量
define('>_<','smile');
//使用常量
echo PI;
//用constant函数访问常量
echo constant('>_<');
常量名字不用$符号(会被系统当作变量) 常量名由字母、数字、下划线组成,不能以数字开头,通常以大写字母为主(与变量区分) 使用define方式定义的常量名中可以使用一些特殊字符,但访问时只能用constant函数 系统常量
PHP_VERSION:PHP版本号
__DIR__:当前php脚本所在绝对路径
__FILE__:当前php脚本所在绝对路径加文件名
__LINE__:当前语句(引用该常量的语句)所在行
__NAMESPACE__:当前所属命名空间
__CLASS__:当前所属的类
__METHOD__:当前所属的方法
数据类型与运算符
数据类型 简单(基本)数据类型
-
整型:int,4字节,表示整数,默认有符号
$a = 120; //十进制 $b = 0b110; //二进制 $c = 0120; //八进制 $d = 0x12a; //十六进制 //输出时默认为十进制,进制间转换可用函数,如:dexbin()为十进制转二进制
-
浮点型:float/double,8字节,表示小数或整型存不下的整数
-
字符串型:string,大小按实际长度分配,表示字符串
-
布尔类型:bool,表示true和false
-
复合数据类型
对象类型:object,存放对象 数组类型:array,存放数组(一次性)
- 特殊数据类型
资源类型:resource,存放资源数据(PHP外部数据,如数据库、文件) 空类型:NULL 数据类型的转换
其他类型转bool类型:除 0,“0”,NULL,空字符串 外,均为true bool类型转数值:true为1,false为0 字符串类型转数值:以字母开头的字符串永远为0;以数字开头的字符串,数值为遇到字母或第二个小数点前为止 强制类型转换:(需转换的类型)+需转换的变量或表达式,不改变原变量的数据类型 数据类型的判断
通过以is_开头后跟数据类型的函数判断:is_类型(变量名)。函数返回值用var_dump函数查看。
用var_dump函数查看:var_dump(变量名)
用一组可获取或设定类型的函数
echo gettype($a); //获取数据类型
settype($a,'int'); //设定数据类型,与强制类型转换不同,会改变原变量的数据类型
empty(); //判断数据是否为空(NULL)或0,为空返回true,反之false
isset(); //判断变量是否存在,存在返回true,反之false
运算符 赋值、算术运算符:赋值运算”=”,加法”+”,减法”-“,乘法”*“,除法”/”,取余运算”%”,自加运算”++”,自减运算”–”
比较运算符
>,<,>=,<=,==,!=:大于,小于,大于等于,小于等于,等于,不等于
===,!==:全等于(数据大小与类型都相同),不全等于(大小或类型不同)
$a = '123';
$b = 123;
var_dump($a == $b); //返回true
var_dump($a === $b); //返回false
逻辑运算符:逻辑与”&&”,逻辑或” | “,逻辑非”!” |
连接运算符:”.”,将两个字符串拼接在一起;”.=”,字符串拼接后赋值给左边
错误抑制符:”@”,在可能出错的语句前加上@符号可关闭错误回显
三目运算符:“表达式1 ? 表达式2 : 表达式3”,表达式1成立时执行表达式2,否则执行表达式3
位运算符:”&“按位与,两个位都为1则为1;” | “按位或,两个位有一个为1则为1;”~“按位非,将位取反;”^“按位异或,两个位相同为0,不同为1;”«“按位左移,右边补0;”»“,按位右移,左边补符号位内容 |
流程控制
if结构,while循环,du-while循环,for循环,switch结构与C语言大体相同
流程控制替代语法:增强PHP+HTML的易读性与美观性
例:打印九九乘法表
<table border=1>
<?php for($i = 1;$i < 10;$i++): //for循环的大括号可由 : 与 endfor; 代替 ?>
<tr>
<?php for($j = 1;$j <= $i;$j++): ?>
<td>
<?php echo $i . ' * ' . $j . ' = '. $i * $j; ?>
</td>
<?php endfor;?>
</tr>
<?php endfor;?>
</table> <!-- 相似的结构还有if,switch,while,foreach -->
文件包含
实质上是将文件中内容嵌入另一文件中相应位置
文件包含的两种方法
向上包含:使用被包含文件中的数据 向下包含:将本文件中的数据通过被包含文件中的方式显示 文件包含的四种形式
include , require:包含文件。语法:include ‘文件名’; 或 include(‘文件名’),文件不在当前目录时要用绝对路径(安全)或相对路径(高效),下同
_注:绝对路径:本地绝对路径(从磁盘根目录开始)与网络绝对路径(相对于网站主机名对应的路径);相对路径:_相对于当前文件的路径,./ 表示当前目录,../表示上级目录
include_once , require_once:系统判断是否已包含文件,使得对应文件只包含一次
include与require区别
在包含文件出错时,include报错级别较低,后面代码会继续执行;require报错级别较高,代码会立即停止执行
函数
函数定义
function,一种语法结构,将一个代码块封装到一个结构中。
关键点:function关键字,函数名,参数,函数体,返回值
基本语法:
function 函数名([参数])
{
//函数体
return 结果; //返回值
}
注意:
实参不能少于形参个数,多余参数函数不会使用。函数定义时可为形参初始化一个默认值,使得提供参数过少时函数可正常执行。例:
function test($num1,$num2=0) //有默认值的参数应放在最右边
{
echo $num1+$num2; //传入参数不足时使用默认值0
}
当函数想改变传入实参存储的值时,在定义函数时形参前加上”&”取地址符号,即地址传递
return返回值可在函数中使用,也可以在文件中使用(包含文件的返回值),return后的语句不执行
如果有变量的值恰好为函数名,那么调用函数可以通过变量+(),如:$变量([参数])
作用域
全局变量:在函数外部定义的变量,函数体内不能直接访问,需要传值 局部变量:在函数内部定义的变量,只能在函数体内使用 超全局变量:一些预定义变量,如$GLOBALS等 在函数内使用global关键字定义的变量,在函数外部也能使用(系统自动在全局区定义相同变量,并将两个变量指向同一内存空间);若函数外部存在同名变量,系统自动将两个变量合并(直接指向外部全局变量内存空间) 静态变量:在函数中用static关键字定义的变量(在定义时应同时赋值),在函数调用结束后,内存空间不会被清空,在函数下次调用时仍可访问之前的数据,且不会被重复初始化 匿名函数 没有名字的函数
基本语法:
//定义基本匿名函数
$func = function()
{
echo 'hello world';
}; //此处应有分号
//调用匿名函数
$func()
变量保存匿名函数,本质上得到的是一个对象(closure)
常用系统函数
有关输出的函数
print():类似于echo,返回值为1,可以不用括号 print_r():类似于var_dump,但不会输出数据类型,只会输出值(常用于打印数组)
有关时间的函数
date():按照指定格式格式化时间戳,没有指定格式将按照默认格式。具体参数 time():获取当前时间对应的时间戳(无参数) microtime():获取微秒级别的时间
有关数学的函数
max(),min():分别返回参数中最大的值和最小的值 rand([参数1],参数2):得到一个在区间内的随机数(包括两个参数),参数1可不提供 mt_rand():与rand函数相同,但效率更高 round():四舍五入 ceil():向上取整,得到比参数大的最小整数 floor():向下取整,得到比参数小的最大整数 pow(参数1,参数2):得到参数1的参数2次方 abs():绝对值 sqrt():平方根
有关函数的函数
function_exists():判断指定函数名字是否在内存中存在 func_get_arg(n):在自定义函数中去获取第n-1 个参数 func_get_args():在自定义函数中去获取所有参数(返回一个数组) func_num_args():获取当前自定义函数的参数数量
错误处理
错误代号 所有错误代码会被系统定义为系统常量,可以直接使用
系统错误 E_PARSE:编译错误 E_ERROR:fatal error,致命错误,会导致代码不能正确执行(出错的位置断掉) E_WARNING:warning,警告错误,不会影响代码执行,但可能会得到意想不到的结果 E_NOTICE:通知错误,不会影响代码执行 用户错误:E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE,用户在使用自定义错误触发的时候会使用到(系统不会用到) 其他:E_ALL,代表所有错误,建议在开发环境中使用 所有以E开头的错误常量(代号)都存储在一个字节内,每种占据一个位,所以可以通过位运算来进行一些错误的控制,例:
排除通知级别的错误:E_ALL & ~E_NOTICE
只要警告和通知级别:E_WARNING | E_NOTICE |
错误触发
程序运行时触发:主要针对代码语法错误和运行时错误,由系统自动生成 人为触发:人为使用对应判断代码来触发错误提示 trigger_error(提示内容,[错误级别]):人为触发错误,错误级别默认为E_USER_NOTICE,不影响下面执行
字符串
字符串定义
普通定义:使用单引号或双引号包裹
结构化定义
nowdoc定义
$str = <<<'ABC'
//上边界符,可随意命名,后面不能有内容
****内容****
ABC; //下边界符必须顶格
heredoc定义
$str = <<<CBA
****内容****
CBA;
注意:
普通定义中,使用单引号包裹的字符串只能识别 \’ 转义字符,其他转义字符原样输出;使用双引号包裹的字符串只识别不了 \’ 转义字符,其他转义字符按转义后形态输出——也就是说,双引号包裹的字符串中当符 号 未 转 义 时 , 可 以 用 来 解 析 变 量 ( 前 提 是 系 统 能 区 分 变 量 与 其 后 面 的 字 符 串 , 而 不 是 连 在 一 起 , 比 如 符号未转义时,可以用来解析变量(前提是系统能区分变量与其后面的字符串,而不是连在一起,比如符号未转义时,可以用来解析变量(前提是系统能区分变量与其后面的字符串,而不是连在一起,比如a bcd与$abcd) 结构化定义中,边界符之间的内容全部原样输出
字符串长度问题
基本函数strlen():得到字符串的长度(单位:字节) 多字节字符串长度问题:中文在utf-8字符集下占3个字节 多字节字符串拓展模块:mbstring拓展 字符串长度函数mb_strlen(string $str[,string $encoding]),第二个参数为指定字符集,未指定则为默认的ASCII
字符串相关函数
转换函数:implode(),explode(),str_split() 截取函数:trim(),ltrim(),rtrim(),substr(),strstr() 大小转换函数:strtolower(),strtoupper(),ucfirst() 查找函数:strpos(),strrpos() 替换函数:str_replace() 格式化函数:printf(),sprintf() 其他:str_repeat(),str_shuffle()
数组
数组定义
使用array关键字(常用)
$a = array(元素1,元素2,……); $b = array(下标=>元素,……); 1 2 使用中括号包裹数据
$a = [元素1,元素2,……]; 1 给变量加上中括号
$a[] = 值; $a[下标] = 值; 1 2 注意:
下标可以为整数或字符串,可以混用 元素顺序以放入时顺序为准,与下标无关 特殊值下标:true——1,false——0,NULL——”” php中数组元素没有类型限制,没有长度限制 PHP多维数组:即数组元素也是数组,建议不超过三维
数组遍历
foreach($数组 as [$下标 =>] $值){
//输出函数
}
//例:
foreach($arr as $k => $v)
{
echo $k , '==' , $v //$k,$v为函数内变量
}
数组相关函数
排序函数:sort(),rsort(),arsort(),ksort(),shuffle() 指针函数:reset(),end(),next(),prev(),current(),key() 其他函数:count(),array_push(),array_pop(),array_shift(),array_unshift(),array_reverse(),in_array(),array_keys(),array_values()