PHP学习笔记
1. PHP 基础
PHP 语法初步
- PHP是一种运行在服务器端的脚本语言,可以嵌入到HTML中。
PHP 代码标记
- 在PHP历史发展中,可以使用多种标记来区分 PHP 版本
- ASP标记
<% php代码 %>
- 短标记
<? php代码 ?>
- 脚本标记
<script language="php"> php代码 </script>
- 标准标记
<?php php代码 ?>
PHP 注释
- php中的注释分为两种:行注释和块注释
- 行注释:
//
: 后面跟的内容都是注释#
: 与//相同
- 块注释:
/*
中间全部都是注释*/
PHP 语句分隔符
;
2. PHP 变量
- 声明变量
$a = 1;
- 删除变量
unset($a);
PHP 预定义变量
- 预定义变量:提前定义的变量,系统定义的变量,存储许多需要用到的数据(预定义变量都是数组)
$_GET
: 获取所有表单以GET方式提交的数据$_POST
: POST提交的数据$_REQUEST
: GET和POST提交的$GLOBALS
: PHP中所有的全局变量$_SERVER
: 服务器信息$_SESSION
: session会话数据$_COOKIE
: cookie会话数据$_ENV
: 环境信息$_FILE
: 用户上传的文件信息
PHP 可变变量
- 可变变量:如果一个变量保存的值刚好是另外一个变量的名字,那么可以直接通过访问一个变量得到另外一个变量的值,在变量前多加一个
$
$a = "bb";
$bb = "123456";
echo $$a; // 123456
变量传值
- 值传递
$a = 10;
$b = $a;
$b = 5;
echo $a, $b; // 10 5
- 引用传递
$c = 10;
$d = &$c;
$c = 5;
echo $c, $d; // 5 5
3. PHP常量
- 常量:const/constant 是一种在程序运行当中,不可改变的量(数据)
- 常量一旦定义,通常数据不可改变(用户级别)
常量定义形式
- 在PHP中常量有两种定义方式(5.3之后才有两种)
- 使用定义常量的函数: define(‘常量名’,常量值);
- 5.3之后才有的 const 常量名 = 值;
- 常量名的命名规则
- 常量名不需要使用 $ 符号,一旦使用系统认为为变量
- 大写字母为主(与变量以示区别)
- 注意细节
- Define 和 const 定义的常量是有区别:在于访问权限区别
- 定义常量通常不区分大小写,但是可以区分,可以参照define函数的第三个参数
define(‘变量名’,值,[区分大小写 boolean])
常量使用方式
echo PI;
- 有时候还需要使用另外一种形式来访问(针对的是特殊名字的常量)需要用到另外一个访问常量的函数:
echo constant(‘常量名’)
系统常量
-
系统常量:系统帮助用户定义的常量,用户可以直接使用
-
常用的几个系统常量
PHP_VERSION
: PHP版本号PHP_INT_SIZE
: 整形大小PHP_INT_MAX
: 整形能表示的最大值
- 特殊常量 魔术常量 随环境变化
__DIR__
: 当前被执行脚本所在电脑的绝对路径__FILE__
: 当前被执行脚本所在电脑的绝对路径(带自己文件名字)__LINE__
: 当前所属的行数__NAMESPACE__
: 当前所属的命名空间__CLASS__
: 当前所属的类__METHOD__
: 当前所属的方法
4. 数据类型
-
数据类型:data type,在PHP中指的是存储的数据本身的类型,而不是变量的类型,PHP是一种弱类型语言,变量变量本身没有数据类型。
-
(简单)基本数据类型
- 整型 int/integer 系统分配4个字节存储,表示整数类型(有前提)
- 浮点型 float/double 系统分配8个字节存储,表示小数或整型存不下的整数
- 字符串型 string 系统根据实际长度分配,表示字符串(引号)
- 布尔类型 bool/boolean 表示布尔类型,只有两个值 true 和 false
- 复合数据类型
- 对象类型 object 存放对象
- 数据类型 array 存储多个数据(一次性)
- 特殊数据类型
- 资源类型 resource 存放资源数据(PHP外部数据,如数据库、文件)
- 空类型 NULL 只有一个值就是NULL(不能运算)
类型转换
- 自动转换:系统根据需求自己判定,自己转换 (用的比较多,效率低)
- 强制(手动)转换:认为根据需要的目标类型转换
- 在转换过程中,用的比较多的是转布尔类型(判断)和转数值类型(算术运算)
- 布尔 true 为 1,false 为 0
- 字符串转数值有自己的规则
- 以字母开头的字符串,永远为0
- 以数字开头的字符串,取到碰到字符串位置(不会同时包含两个小数点)
类型判断
- 通过一组类型判断函数,来判断变量,返回这个变量所保存数据的数据类型 : 是一组以is_开头后面跟着类型名字的函数。
is_XXX(变量名)
- Bool类型不能用 echo 来查看,可以使用var_dump结构来查看
var_dump(变量1,变量2…)
- 还有一组函数可以用来获取以及设定数据(变量)的类型
- Gettype(变量名) : 获取类型,得到的是该类型对应的字符串
- Settype(变量名,类型) : 设定数据类型,与强制转换不同
- 强制转换(类型)变量名,是对数据复制的内容弄进行处理(不会实际改变)
- settype 会直接改变数据本身
5. PHP 运算符
连接运算符
- 连接运算,是PHP将多个字符串拼接的一种符号
.
将两个字符串连接到一起.=
复合运算,将左边的内容弄与右边的内容连接起来,然后重新复制给左边变量
a.= $b
==
a = a.b
错误抑制符
-
在php中有一些错误可以提前预知,但是这些错误无法避免,但又不希望报错给用户看,可以使用错误抑制符处理。
-
@
: 在可能出错的表达式前面使用
$a = 10;
$b = 0;
@($a % $b)
- 通常在生产环境(上线)会用到,在开发的时候不会用,系统本身最好没有任何错误
6. PHP 常用系统函数
有关输出的函数
print()
类似echo输出提供的内容,本质是一种结果(不是函数),返回1,可以不需要使用括号print_r()
类似于vat_dump,但是比var_dump简单,不会输出数据的类型,只会输出值(数组打印使用比较多)
有关时间的函数
date()
: 按照指定格式对对应的时间戳(从1970年格林威治时间开始计算的秒数),如果没有指定特定的时间戳。那么就是解释当前时间time()
: 获取当前时间对应的时间戳microtime()
: 获取微秒级别的时间Strtotime()
: 按照规定的字符串转换成时间戳
7. 文件加载
文件加载含义
- 将一个文件包含到当前文件中,成为当前文件运行过程中的一部分。
- 同样将一些公共的代码,在多个页面都需要用到的时候,会做成一个独立的文件。
- 然后在不同的页面需要用到的时候,直接载入进来就可以了
文件加载语法
include “要载入的文件路径”;
- 可以载入php,也可以载入html
文件加载的四种方式
-
include ''
: 每次都载入文件(可能会重复载入),如果载入失败,在报错后继续执行后续语句 -
include_once ''
: 只载入一次(不会重复载入),如果载入失败,在报错后继续执行后续语句 -
require ''
: 每次都载入文件(可能会重复载入),如果载入失败,在报错后终止程序 -
require_once ''
: 只载入一次(不会重复载入),如果载入失败,在报错后终止程序 -
一般来说,如果被载入的文件内容,是后续代码运行的必备前提,则应该使用 require 载入
-
如果被载入的文件内容,只需要或仅允许出现一次,则应该使用 xxxx_once载入
-
获取物理路径(绝对路径)的方式
__DIR__
表示当前文件所在路径,由他可以构建出绝对路径getced()
表示当前正访问的网页路径,由他也可以构建出绝对路径
8. 错误处理
错误分类
- 语法错误
- 程序不能运行,是在运行之前,检查语法的时候,就发现语法出错,结果是提示错误,不运行程序
- 运行时错误
- 语法检查没错,然后开始运行,在运行中出现了错误报错
- 常见错误
- 逻辑错误
- 程序能运行,且一直到结束没有报错,但执行得到的结果却是错的
常见错误代号
-
E_NOTICE
提示性错误 轻微;错误发生后,后面的程序继续执行 -
E_WARNING
警告性错误 稍微严;错误发生后,后面的程序继续执行 -
E_ERROR
严重错误/致命错误;错误发生后,后面的程序不再执行 -
E_PARSE
语法错误(语法解析错误);语法解释错误,直接不运行程序 -
E_USER_NOTICE
用户自定义的提示错误 -
E_USER_WARNING
用户自定义的警告错误 -
E_USER_ERROR
用户自定义的严重错误 -
E_ALL
它是一个代表’所有’错误的代号 -
说明
- 这些错误代号,其实只是系统预先设定的一些常量,他们的值大约是1,2,4,8,16
- 这些错误带哈,通常只是用于对错误控制时进行“设置”使用
- 他们是一系列的整数,并具有一定规律 1 2 4 8 16 32 64
- 可以在 php.ini 中设置他们
错误触发
- 程序本身有错,则运行时就会触发错误(并提示)
- 程序本身没错,但出现了不符合预计的情形(比如数据不符合要求)
- 此时程序员可以主动触发一个错误,也可以说主动创建一个错误
- 这就是用户错误 包括
E_USER_NOTICE
E_USER_WARNING
E_USER_ERROR
- 自定义错误触发语法:
trigger_error(“自定义错误提示内容”, 自定义错误的代号
E_USER_NOTICE
等);
错误显示设置
- 如果有错误发生,默认情况下会被显示在页面。
- 我们可以对此进设置,以决定以下两点:
- 设置 display_errors 以决定是否显示错误
- 在php.ini中设置
display_errors = On
或 Off - 在这里设置,影响所有使用该php语言引擎的代码
- 在php文件中设置
ini_set('display_errors',1或0)
; //1显示0不显示 - 在这里设置只影响当前网页代码本身
- 在php.ini中设置
- 设置 error_reporting 以决定显示哪些错误
- 在php.ini中设置 error_reporting=错误代号1|错误代号2|
E_ERROR
等 // 要显示的就写出来,或者E_ALL
所有 - 在php文件中,道理类似
ini_set('error_reporting',错误代号1|错误代号2|...)
- 在php.ini中设置 error_reporting=错误代号1|错误代号2|
错误日志设置
- 如果有错误发生,默认情况下不会将错误信息记录保存下来
- 我们可以对此进设置,以决定以下两点:
- 设置
log_errors
以决定是否记录错误- php.ini 中设置:
log_errors = On
或Off
- 代码文件中设置:
ini_set('log_errors',1或0)
- php.ini 中设置:
- 设置
error_log
以决定记录到哪里- 通常,就设置为一个文件名,php系统会在网站的每个文件夹下都建立该文件,并记录错误
- php.ini 中
error_log = error.txt
//纯文本 - 代码中
ini_set("error_log",'error.txt')
自定义错误处理(重点)
-
之前,我们面对的情形都是错误发生的时候,系统生成错误,并处理错误(给出错误信息)。我们能控制的就是:是否显示、显示什么、是否记录、记录到哪里
-
实际上,我们也可以更进一步控制错误信息,以决定错误发生的时候,显示什么样的错误信息,这就是自定义错误处理
-
具体做法分两步
- 声明错误发生时,由我们自己来处理————设定一个错误处理的函数名
- 定义该函数,在函数中详细设定错误的处理情况,怎么显示,显示什么,怎么记录,记录什么
- 参数解释
- errCode 错误代号
- errMsg 错误信息
- errFile 错误文件
- errLine 错误行号
- 形参顺序固定,而且是由系统调用该函数并传入实参数据
- 自定义错误只能处理 “非致命错误” (非E_ERROR)
set_error_handler("my_error_handler"); // 此行在错误以上
function my_error_handler($errCode, $errMsg, $errFile, $errLine){
...
}
9. 字符串详解
- 四种不同形式字符串
单引号字符串
-
形式: $s1 = ‘字符串’;
-
特点:
- 只能使用 2 个转义符 \ 代表一个反斜杠 ’ 代表一个单引号
-
通常如果没有特殊需求,比如字符串中使用一些转义符,以及一些变量,则推荐使用单引号字符串
$str = ‘John’s phone is lost’;
双引号字符串
- 形式: $s2 = “字符串”
- 特点:
- 能使用较为丰富的转义符,包括 \ " \n \r \t $ 等
- \n 代表换行符
- \r 代表回车符
- \t 代表tab符
- $ 代表"$"本身,因为双引号字符串中能识别解析变量,则如果不想要去解析,就用此转义
$v1 = 10;