PHP基础上手
本文最后更新于:4 个月前
变量
定义变量不需要规定数据类型
变量名以 “$” 符号开头,只能包含数字、字母、下划线,不能数字开头
使用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>
文件包含
实质上是将文件中内容嵌入另一文件中相应位置
文件包含的两种方法
向上包含:使用被包含文件中的数据
向下包含:将本文件中的数据通过被包含文件中的方式显示
文件包含的四种形式
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()
本博客所有文章均采用 CC BY-SA 4.0 协议,除友链外 ,转载请注明出处!