PHP入门
目录
一、初识PHP?
1.1 PHP
是什么
PHP(Hypertext Preprocessor 超文本预处理器)的简称,是一种被广泛应用的开源通用的服务器端脚本语言,适用于web开发并可嵌入HTML中
- 通用:指跨平台,如:Windows、Linux、MacOS
- 开源:意味着你可以轻松获取全部源代码,并进行定制或扩展
- 免费:意味着你不必为PHP花一分钱,哪怕用在商业项目中
- 服务器端:意味着你必须将它安装在服务器环境下才可以使用
- 脚本语言:解释型语言,按编写顺序执行。是指不需要编译,直接由解释器/虚拟机执行的编程语言
1.2 PHP
能做什么
- 可以快速动态的生成HTML页面
- 可以返回前端需要的各种类型的数据
- 可以高效安全的处理表单数据
- 可以安全的操作服务器上的文件
- 可以控制与客户端的会话( Cookie/Session )
- 可以对用户的行为进行授权控制
- 可以高效安全的操作各种类型的数据库
- 通过扩展,可以实现加密,压缩等其他功能
- 可以提供接口数据,包括:小程序、APP、等其他语言
1.3 PHP
程序执行流程
二、PHP
基础
2.1 php
程序
- PHP文件的默认扩展名是
.php
- PHP文件中可以包含
html
、CSS
、JavaScript
代码
2.1.1 PHP
标记
开始标记
<?php
和结束标记?>
中间写php
代码当解析一个文件时,PHP会寻找起始和结束标记,也就是告诉PHP开始和停止解析二者之间的代码。
此种解析方式使得PHP可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被PHP解析器忽略
|
|
2.1.2 PHP
代码
指令 | 描述 |
---|---|
echo | 可以输出一个或多个字符串,用逗号隔开 |
print | 只允许输出一个字符串 |
2.1.3 语句结束符;
一行代码结束应该以;
结束
|
|
2.1.4 注释
|
|
2.3 PHP
变量
2.3.1 声明变量
声明变量使用
$
=
属于赋值运算符
|
|
2.3.2 变量命名规则
- 不能以数字开头
- 中间不能有空格
|
|
2.4 php
标量数据类型
类型 | 描述 |
---|---|
布尔型 Boolean | true 和 false |
整型 Integer | 0~无限大 |
浮点型 Float | 带小数的数字 |
字符串 String | 汉字、英文、复合、等 |
echo
输出数据值
var_dump
可以打印数据类型和值
2.4.1 布尔型
- 布尔型通常用于条件判断
- 当
echo
遇上true
的时候返回1,遇上false
则返回空字符串
|
|
2.4.2 整型
- 整数不能包含逗号或空格
- 整数是没有小数点的
- 整数可以是整数或负数
- 整数可以用三种格式来指定:十进制、十六进制、八进制
|
|
2.4.3 浮点型
|
|
2.4.4 字符串
|
|
2.5 php
复合数据类型
类型 | 描述 |
---|---|
array | 数组 |
object | 对象 |
callable | 可调用 |
iterable | 可迭代 |
2.5.1 数组
类型 | 描述 |
---|---|
数组 Array | 数组可以在一个变量中存储多个值 |
创建空数组
1 2 3 4 5 6
<?php $arr = array(); var_dump($arr); //array(0) {} $arrs = []; var_dump($arrs); //array(0) {}
创建索引数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<?php $arr = array( '足球', '篮球', '排球' ); var_dump($arr); /* array(3) { [0]=> string(6) "足球" [1]=> string(6) "篮球" [2]=> string(6) "排球" } */
创建关联数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<?php $arr = [ 'Football' => '足球', 'Basketball' => '篮球', 'Volleyball' => '排球' ]; var_dump($arr); /* array(3) { ["Football"]=> string(6) "足球" ["Basketball"]=> string(6) "篮球" ["Volleyball"]=> string(6) "排球" } */
输出数组值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
<?php $arr = array( '足球', '篮球', '排球' ); echo $arr[0]; //足球 echo $arr[1]; //篮球 echo $arr[2]; //排球 $arr = [ 'Football' => '足球', 'Basketball' => '篮球', 'Volleyball' => '排球' ]; echo $arr['Football']; //足球 echo $arr['Basketball']; //篮球 echo $arr['Volleyball']; //排球
打印数组
print_r
1 2 3 4 5 6 7 8 9 10 11 12 13 14
<?php $arr = array( '足球', '篮球', '排球' ); print_r($arr); /* Array ( [0] => 足球 [1] => 篮球 [2] => 排球 )
php
连接符1 2 3 4 5
<?php $var1 = 'Hello'; $var2 = 'World'; var_dump($var1 . $var2); //string(10) "HelloWorld" var_dump($var1 . ' ' . $var2); //string(11) "Hello World"
2.5.2 php
多维数组
二维数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
<?php $arr = array( array( 'name' => 'Joker', 'age' => 18 ), array( 'name' => 'desire', 'age' => 19 ), array( 'name' => 'tommy', 'age' => 20 ) ); var_dump($arr); /* array(3) { [0]=> array(2) { ["name"]=> string(5) "Joker" ["age"]=> int(18) } [1]=> array(2) { ["name"]=> string(6) "desire" ["age"]=> int(19) } [2]=> array(2) { ["name"]=> string(5) "tommy" ["age"]=> int(20) } } */ print_r($arr); /* Array ( [0] => Array ( [name] => Joker [age] => 18 ) [1] => Array ( [name] => desire [age] => 19 ) [2] => Array ( [name] => tommy [age] => 20 ) ) */
三维数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
<?php $arr = [ [ 'name' => 'Joker', 'age' => 18, 'hobby' => [ '爬山', '读书', '徒步' ] ], [ 'name' => 'desire', 'age' => 19, 'hobby' => [ '篮球', '攀岩', '游泳' ] ], [ 'name' => 'tommy', 'age' => 20, 'hobby' => [ '足球', '潜水', '摄影' ] ] ]; var_dump($arr); /* array(3) { [0]=> array(3) { ["name"]=> string(5) "Joker" ["age"]=> int(18) ["hobby"]=> array(3) { [0]=> string(6) "爬山" [1]=> string(6) "读书" [2]=> string(6) "徒步" } } [1]=> array(3) { ["name"]=> string(6) "desire" ["age"]=> int(19) ["hobby"]=> array(3) { [0]=> string(6) "篮球" [1]=> string(6) "攀岩" [2]=> string(6) "游泳" } } [2]=> array(3) { ["name"]=> string(5) "tommy" ["age"]=> int(20) ["hobby"]=> array(3) { [0]=> string(6) "足球" [1]=> string(6) "潜水" [2]=> string(6) "摄影" } } } */ print_r($arr); /* Array ( [0] => Array ( [name] => Joker [age] => 18 [hobby] => Array ( [0] => 爬山 [1] => 读书 [2] => 徒步 ) ) [1] => Array ( [name] => desire [age] => 19 [hobby] => Array ( [0] => 篮球 [1] => 攀岩 [2] => 游泳 ) ) [2] => Array ( [name] => tommy [age] => 20 [hobby] => Array ( [0] => 足球 [1] => 潜水 [2] => 摄影 ) ) ) */
多维数组访问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
<?php $arr = [ [ 'name' => 'Joker', 'age' => 18, 'hobby' => [ '爬山', '读书', '徒步' ] ], [ 'name' => 'desire', 'age' => 19, 'hobby' => [ '篮球', '攀岩', '游泳' ] ], [ 'name' => 'tommy', 'age' => 20, 'hobby' => [ '足球', '潜水', '摄影' ] ] ]; echo $arr[0]['name'] . '----'; //Joker---- echo $arr[0]['age'] . '----'; //18---- echo $arr[0]['hobby'][0] . '----'; //爬山---- echo $arr[0]['hobby'][1] . '----'; //读书---- echo $arr[0]['hobby'][2] . '----'; //徒步----
2.5.3 php
数组循环
foreach
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<?php $arr = [ 'Football' => '足球', 'Basketball' => '篮球', 'Volleyball' => '排球' ]; foreach ($arr as $v) { echo $v . "\n"; } /* 足球 篮球 排球 */
key
和value
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
<?php $arr = [ 'Football' => '足球', 'Basketball' => '篮球', 'Volleyball' => '排球' ]; foreach ($arr as $k => $v) { echo $k . "=>" . $v . "\n"; } /* Football=>足球 Basketball=>篮球 Volleyball=>排球 */ $arr = array( '足球', '篮球', '排球' ); foreach ($arr as $k => $v) { echo $k . "=>" . $v . "\n"; } /* 0=>足球 1=>篮球 2=>排球 */
2.6 php
特殊数据类型
类型 | 描述 |
---|---|
控制 NULL | 表示变量没有值 |
resource | 资源 |
2.6.1 NULL
|
|
2.7 条件判断
2.7.1 三元运算符? :
|
|
2.7.2 if
|
|
2.7.3 if else
|
|
2.7.4 if elseif else
|
|
2.7.5 switch case default
|
|
2.7.6 PHP8
新特性match
|
|
2.7.7 switch
和match
对比
运算符
php
运算符
运算符 | 描述 |
---|---|
+ 、- 、* 、/ | 加减乘除 |
% | 取余 |
++ 、-- | 加加、减减 |
. | 连接,用在字符串 |
|
|
php
赋值运算符
运算符 | 描述 |
---|---|
= | 赋值运算符 |
+= | 先加再赋值 |
-= | 先减后赋值 |
*= | 先乘后赋值 |
/= | 先除后赋值 |
%= | 先取余后赋值 |
.= | 先连接后赋值 |
|
|
php
比较运算符
运算符 | 描述 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
=== | 恒等于 |
!== | 恒不等 |
|
|
php
逻辑运算符
运算符 | 描述 |
---|---|
and 和 && | 与 |
or 和 ` | |
xor | 异或 |
! | 非 |
|
|
循环
while
|
|
do while
|
|
for
|
|
continue
- 结束当前循环,进入下次循环
- 在循环语句中使用
while
for
|
|
break
- 结束循环
- 在循环语句中使用
while
for
switch
- 可以跳出多层循环
|
|
三、函数
3.1 函数介绍
3.1.1 函数判断
|
|
3.1.2 函数的分类
- 根据函数的提供者分为两类:
- 系统函数:编写语言开发者事先写好提供给开发者直接是用的(内置函数)
- 自定义函数:用户根据自身需求,对系统功能进行扩展
3.2 系统函数
PHP拥有超过1000个内置函数
函数集合名 | 描述 |
---|---|
String | 字符串处理函数 |
Array | 数组函数允许访问和操作数组 |
MySQLi | 允许访问MySQL数据库服务器 |
Date | 服务器上获取日期和时间 |
Filesystem | 允许访问和操作文件系统 |
Mail | 数学函数能处理integer和float范围内的值 |
HTTP | 允许在其他输出被发送之前,对由web服务器发送到浏览器的信息进行操作 |
Calendar | 日历扩展包括了简化不同日历格式间转换的函数 |
Directory | 允许获得关于目录及其内容的信息 |
Error | 允许对错误进行处理和记录 |
Filter | 进行验证和过滤 |
FTP | 通过文件传输协议(FTP)提供对文件服务器的客户端访问 |
MySQL | 允许访问MySQL数据库服务器 |
SimpleXML | 允许把XML转换为对象 |
XML | 允许解析XML文档,但无法对其进行验证 |
Zip | 压缩文件函数允许读取压缩文件 |
3.2.1 String
字符串函数
函数 | 描述 |
---|---|
strtolower() | 将字符串转化为小写 |
strtoupper() | 将字符串转化为大写 |
strlen() | 获取字符串长度 |
trim() | 去除字符串首尾处的空白字符 |
ltrim() | 去除字符串开头处的空白字符 |
rtrim() | 去除字符串结尾处的空白字符 |
str_replace() | 字符串替换 |
strpbrk() | 字符串中查找一组字符是否存在 |
explode() | 将字符串分割为数组 |
md5() | 将字符串进行md5加密 |
|
|
3.2.2 Array
数组函数
函数 | 描述 |
---|---|
count() | 数组中元素的数量 |
implode() | 把数组元素组合为字符串 |
array_merge() | 两个数组合并为一个数组 |
in_array() | 数组中是否存在指定的值 |
sort() | 对数值数组进行升序排序 |
rsort() | 对数值数组进行降序排序 |
array_unique() | 移除数组中的重复的值 |
array_push() | 将一个或多个元素插入数组的末尾 |
array_pop() | 删除数组中的最后一个元素 |
|
|
3.3 自定义函数
3.3.1 函数的基本语法
- 必须使用关键字:
function
声明 - 函数名称不区分大小写
|
|
3.3.2 调用函数
|
|
3.3.3 函数参数
- 方法参数可以有默认值
|
|
3.3.4 作用域
- php中,只有函数作用域和全局作用域
- 所有函数作用域的变量,外部不可见
- 全局作用域声明变量,在函数中是可见的
|
|
3.3.5 PHP8
新特性:命名参数
|
|
四、类与对象
类是具有相同属性和操作的一组对象的集合
创建类
|
|
创建对象
|
|
复合数据类型
类型 | 描述 |
---|---|
object | 对象 |
|
|
成员变量
成员变量:类属性
|
|
成员方法
|
|
魔术方法
方法 | 描述 |
---|---|
__construct | 构造方法 |
__destruct | 析构方法 |
__call | 在对象中调用一个不可访问方法时调用 |
__callStatic | 在静态方式中调用一个不可访问方法时调用 |
__get | 获得一个类的成员变量时调用 |
__set | 设置一个类的成员变量时调用 |
__isset | 当对不可访问属性调用isset() 或empty() 时调用 |
__unset | 当对不可访问属性调用unset() 时被调用 |
__sleep | 执行serialize() 时,先会调用这个函数 |
__wakeup | 执行unserialize() 时,先会调用这个函数 |
__toString | 类被当成字符串时的回应方法 |
__invoke | 调用函数的方式调用一个对象时的回应方法 |
__set_state | 调用var_export() 导出类时,此静态方法会被调用 |
__clone | 当对象复制完成时调用 |
__autoload | 尝试加载未定义的类 |
debugInfo | 打印所需调试信息 |
|
|
类的三大特性
- 继承:可以让某个类型的对象获得另一个类型的对象的属性和方法
- 封装:指将客观事物抽象成类,每个类对自身的数据和方法实行保护
- 多态:指同一个实体同时具有多种形式,它主要体现在类的继承体系中
继承
extends
关键词继承父类
|
|
封装
public
默认,关键词定义,类内、类外、子类都可见
protected
关键词定义,类内、子类可见,类外不可见
pricate
关键词定义,类内可见,子类、类外不可见
|
|
多态
实现多态的前提是要先继承再重写父类方法
|
|
静态成员
static
关键词定义静态成员
|
|
抽象类
abstract
关键词定义抽象方法/抽象类
|
|
接口
interface
关键词创建接口。要求类必须实现的方法,但不需要定义方法的具体实现过程。
implements
关键词使用接口。
|
|
接口常量
const
创建常量
|
|
常量
|
|
关键词
关键词 | 类外声明 | 声明类 | 声明属性 | 声明方法 | 解释 |
---|---|---|---|---|---|
const | √ | √ | 定义类常量 | ||
extends | √ | 扩展类,用一个类去扩展它的父类 | |||
public | √ | √ | 公用属性或方法 | ||
protected | √ | √ | 私有属性或方法 | ||
pricate | √ | √ | 受保护的属性或方法 | ||
static | √ | √ | √ | 静态成员 | |
abstract | √ | √ | 抽象类或方法 | ||
interface | √ | 创建接口 | |||
implements | √ | 实现接口 | |||
final | √ | √ | 类不能被继承 | ||
parent:: | 访问父类 | ||||
$this-> | 访问本类 | ||||
self:: | 访问本类静态 | ||||
namespace | √ | 创建命名空间 |
final
类不能被继承
|
|
parent::
访问父类
|
|
命名空间
- 命名空间:解决全局成员的命名冲突问题,借鉴了文件目录的思想
- 空间:同一空间内不允许成员重名,但不同空间内,允许同名成员存在
创建命名空间
命名空间使用
namespace
关键字声明
|
|
子命名空间
|
|
访问命名空间
use
关键词引用命名空间
AS
解决类名过长、重名问题
|
|