PHP基础上手

本文最后更新于:4 个月前

变量

  1. 定义变量不需要规定数据类型

  2. 变量名以 “$” 符号开头,只能包含数字、字母、下划线,不能数字开头

  3. 使用unset函数清除变量

  4. 预定义变量

    $_GET:存储以get方式提交的表单
    $_POST:存储以post方式提交的表单
    $_REQUEST:存储以get或post方式提交的表单
    $GLOBALS:存储PHP中所有全局变量
    $_SERVER:服务器信息
    $_SESSIOON:session会话信息
    $_COOKIE:cookie会话信息
    $_ENV:环境信息
    $_FILES:用户上传的文件信息
    
  5. 可变变量:一个变量的内容可作为另一变量的名字

    $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__:当前所属的方法

数据类型与运算符

数据类型
简单(基本)数据类型

  1. 整型:int,4字节,表示整数,默认有符号

    $a = 120;    //十进制
    $b = 0b110;        //二进制
    $c = 0120;        //八进制
    $d = 0x12a;        //十六进制
    //输出时默认为十进制,进制间转换可用函数,如:dexbin()为十进制转二进制
    
  2. 浮点型:float/double,8字节,表示小数或整型存不下的整数

  3. 字符串型:string,大小按实际长度分配,表示字符串

  4. 布尔类型:bool,表示true和false

  5. 复合数据类型

对象类型:object,存放对象
数组类型:array,存放数组(一次性)

  1. 特殊数据类型

资源类型: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()