PHP2
网站基本概念
服务器
提供计算服务的设备,取决于机器上安装的服务软件,需要响应服务请求,并进行处理。在网络环境下,根据提供的服务类型不同,分为文件服务器,数据库服务器 ,web服务器等。
web服务器:提供web服务(网站访问),需要安装web服务软件,Apache,iis,tomcat
ip
互联网协议,是能使连接到网上的所有计算机网络实现相互通信的一套规则,可以与英特网互联互通。ip地址具有唯一性。
域名
Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。
特殊ip 127.0.0.1
特殊域名 localhost
DNS 域名系统
作为域名和ip地址相互映射的一个分布式数据库,将域名解析为ip地址(域名解析)。
端口
设备与外界通讯交流的出口,区分一台计算机上访问的不同内容。
web程序的访问流程
静态网站
pc端 浏览器输入url(互联网的绝对路径) 通过DNS解析IP地址(先找本地DNS 后找网络DNS) 返回浏览器 通过ip找到服务器 通过端口找到对应apache 根据uri(统一资源标识)获取文件,读取内容 apache返回结果 浏览器解析 展示
动态网站
找到对应apache后 读取文件时,通过php引擎,解析php代码(读取数据时可能需要数据库) php 交给apache HTML
Apache目录
bin cgi-bin Windows系统下可执行的文件
conf 配置文件目录
htdocs apache默认的主机地址(网站根目录)
modules 模块 (apache所有功能都是模块化的)
httpd.exe 应用
httpd -M 查看模块
static 静态加载 shared 动态加载
httpd -t 验证文件是否有效
php.exe 应用
php.exe -f 文件路径 解析php代码
虚拟主机
将计算机中不同的文件夹进行不同的内容,然后实现让服务器根据用户的需求从不同的文件夹中读取不同内容
基于IP的虚拟机:一台电脑多个ip,每个ip对应多个网站
基于域名的虚拟机:一台电脑一个 ip,但 ip下可以制作多个网站
php
标记
<?php ? >
在HTML中
注释
行注释 # //
块注释 /* */
语句结束符
;
?> 有;的作用
变量
概念
存储计算结果,存在变量名,通过变量名访问数据,数据是可变的
使用
$var; 定义变量
$var=2; 定义并赋值
echo $var; 访问变量
$var=4; 修改变量
unset($var); 删除变量
命名规则
1.以$开头
2.名字由字母、数字和下划线构成,不能以数字开头。
3.允许中文变量 不建议
预定义变量
提前定义的变量,系统定义,都是数组
$_GET 获取所有表单以get方式提交的数据
$_POST post提交的数据
$_REQUEST 保存get和post提交的数据
$_GLOBALS PHP中的全局变量
$_SERVER 服务器信息
$_SESSION session会话数据
$_COOKIE cookie会话数据
$_ENV 环境信息
$_FILES 用户上传的文件信息
可变变量
如果一个变量保存的值是另一个变量的名字,可以通过这个变量访问到另一个变量 在变量前在多加一个$符号
变量传值
值传递 将变量保存的值赋值一份,然后将新的值给另外一个变量保存
引用传递 将保存值所在的地址,传递给另一个变量
值传递 $a=1; $b=$a
引用传递 $a=1; $b=&$a
常量
概念
1.使用定义常量的函数
define('常量名',常量值);
2.使用const关键字
const 常量名 = 常量值
换行符
引号内 \n < br>
引号外 .PHP_EOL
命名规则
1.不用$ 会被认为是变量
2.其余与变量相同
3.规则比变量松散,在define下可以使用特殊符号
访问常量
1.正常情况
echo 常量值
2.特殊符号 不能直接访问
echo constant('常量值');
系统常量
系统帮助用户定义的常量,用户可以直接使用
常用的系统常量
PHP_VERSION PHP版本号
PHP_INT_SIZE 整形大小
PHP_INT_MAX 整形能表示的最大值
系统魔术常量
_ DIR _ :当前被执行的脚本所在电脑的绝对路径
_ FILE _ :当前被执行的脚本所在的电脑的绝对路径(带自己文件的名字)
_ LINE _ :当前所属的行数
_ NAMESPACE _ :当前所属的命名空间
_ CLASS _ :当前所属的类
_ METHOD_:当前所属的方法
数据分析
数据类型
基本类型
整型 int 4个字节存储 表示整数型
浮点型 float 8个字节存储 表示小数或整型存不下的整数
字符串型 string 系统根据实际长度分配 表示字符串
布尔类型 bool 只有两个值 true和false
[empty()判断数据的值为空; isset()判断数据存储的变量本身是否存在]
复合类型
对象类型 object 存放对象
数组类型 array 存储多个数据
特殊数据类型
资源类型 resource 存放资源数据(PHP 外部数据 eg.数据库、文件)
空类型 NULL 不能运算
数据转化
自动转化 (字符串进行运算会先转换成数值型)
强制转化 eg.(float)$a
(对数据复制的内容进行处理,不实际处理存在的值)
转化为NULL值时 用unset()
常见转化: 转布尔类型(判断)和转数值类型(算术运算)
其他类型转布尔类型:
true或false,大部分都对应true
其他类型转数值类型:
-
布尔true为1,false为0
-
字符串转数值有自己的规则
以字母开头,永远为0;以数字开头,取到碰到字符串为止(不会同时包含两个小数点)
类型判断
1.可以通过echo查看
eg. echo is_int($a);
2.布尔值不能通过echo查看
echo var_dump(is_int($a));
3.其他
Gettpye($a) 获取类型
Settpye($a) 设定数据类型 直接改变数据本身,与强制转化不同
var_dump
一个调用函数,用于输出变量的详细信息,包括变量的类型、长度(如果是字符串或数组)以及具体的值。
运算符
赋值运算符
算术运算符
比较运算符
逻辑运算符
&& 与 || 或 ! 非
连接运算符
. 将两个内容连接在一起
.= 将内容连接在一起,赋值给左边的变量
错误抑制符
表达式前加@()
三目运算符
表达式1?表达式2:表达式 3;
运算:如果表达式1成立,那么执行表达式2,否则执行表达式3;
注意: 如果表达式本身比较复杂,建议使用括号包起来。
自操作运算符
++ 在原来值加1
-- 在原来值减1
前置自操作 ++$a
后置自操作 $a++
$a=1;
$b = $a++; $c=++$a
$a=2 $b=1 $c=2
衍生操作
举例 $a += $b 相当于$a=$a+$b
位运算符
计算机码
计算机在实际存储数据时采用的编码规则
原码 数据本身从十进制转化为二进制的结果
正数 左边符号位为0
负数 左边符号位为0
反码 针对负数 符号位不变 其它位取反
补码 针对负数 反码+1
运算
取出计算机最小的单位(位bit),进行运算
&:按位与,两个位都为 1,结果为 1,否则为 0
|:按位或,两个有一个为 1,结果为 1
~:按位非,一个位如果为1则变成 0,否则反之
^:按位异或,两个相同则为 0,不同则为1
<<:按位左移,整个位(32 位),向左移动一位,右边补0
》》: 按位右移,整个位向右移动一位,左边补符号位对应内容
(正数补0,负数补 1)
注意:
1.系统进行任何运算的时候都是使用补码
2.运算结束后必须转化为原码才是最终显示的数据
3.位运算符有优先级
流程控制
代码执行的方向
控制分类
顺序结构:代码从上往下,顺序执行
分支结构:给定条件,同时有多种可执行代码,根据条件执行
循环结构:在某个条件控制范围内,指定的代码可以重复执行
分支结构
主要为 if 和 switch 两种
if分支
最简结构
if(条件表达式){
} 只有一段代码,可以选择是否执行
基础结构
if(条件表达式){
}else{}
复杂结构
if(条件表达式1){
}elseif(条件表达式2){
}...(可以使用多个elseif)
else{
}
switch分支
switch(条件表达式){
Case 值1:
要执行的代码段;
Break;
Case 值2:
......
Default:
匹配失败的代码;
Break;
}
if 和 switch的选择
- if能做所有分支结构事情
- switch处理的是,条件多,单一且固定值匹配的分支结构
循环结构
代码段在一定的控制下,可以多次执行
For循环
for(条件表达式1;条件表达式2;条件表达式3){
}
条件表达式1:定义初始化条件,可以有多种赋值语句存在,使用逗号隔开
条件表达式2:边界判定,限定循环的次数
条件表达式3:执行条件变化
while循环
条件初始化;
while(条件表达式){
//条件表达式就是判断边界条件
循环体; //循环条件的变化
}
相比起if循环,while循环更灵活
do-while循环
do{
//循环体
}while(条件表达式);
相比while循环,至少执行一次
循环控制
中断控制:重新开始循环,循环体中还有其他内容,也再执行
continue 可以多层嵌套,默认是1
终止控制:循环直接结束
break 同理,默认层级是1
流程控制代替语法:
for(;😉{ ==> for(;😉:
} ==> endfor;
同理,if语法为 if(): endif;
文件包含
在一个脚本中,将另一个脚本包含进来
文件包含的作用
分工协做,多个脚本完成一个项目
- 向上包含:当前脚本需要其他文件的代码
- 向下包含:当前内容要通过其他脚本显示
文件包含四种形式
include: 包含文件
include_once: 系统会自动判断文件包含过程中,是否已经包含过(一个文件最多被包含一次)
require: 同include
require_once: 同include_once
文件加载原理
- 文件加载时,系统自动将被包含的文件嵌入当前文件
- 加载位置:对应代码嵌入的位置就是include所在位置
- 被包含的文件单独编译
php文件中,编译过程中出现语法错误,则无法执行;包含文件中有错,系统会执行到include包含文件位置时停止
php代码执行流程:
- 读取代码文件
- 将php代码转换为字节码
- 按照字节码进行逻辑运算
- 转化成对应html
include和require区别
报错方式不同,include要求较低,出错后面的代码继续执行;require后面的代码则不再执行。
include 系统碰到一次,执行一次;对文件进行多次加载,则系统执行多次
include_once 系统碰到多次,都只执行一次
文件加载路径
- 绝对路径(效率低,安全)
- 相对路径(效率高,容易出错)
文件嵌套包含
一个文件包含另外一个文件,同时被包含的文件又包含了另外一个文件
函数
一种语法结构,将可以实现某个功能的代码块封装到结构中,实现代码的复用。
基本语法
关键点: function、函数名、参数(形参和实参)、函数体和返回值
function 函数名([参数]){
//函数体
//返回值 return
}
通过 函数名() 访问函数,如果函数定义时有参数,访问函数时必须传入对应参数
函数是一种结构,只有在调用的时候才会执行
函数在代码执行时,找到函数名,进行调用,不是在编译阶段
(先编译,后执行,可以在定义函数前,调用该函数)
函数命名规则
和变量命名规范相似
函数名命名是可能需要多个单词组合表达:
- 驼峰法 除左边第一个单词,后面所有单词首字母大写
- 下划线法 单词之间下划线连接,单词全部小写
函数参数
分为形参和实参
形参是实参的载体,函数定义时使用形参,函数调用时使用实参。
传入的实参可以是常量,也可以是变量
实参可以多于形参,形参不可少于实参
默认值
指的是形参的默认值,在函数定义时,赋予形参初始值
引用传值
值传递:将实参的值取出来赋值给形参
引用传值:希望在外部获取的值在函数内部改变,那么就需要在函数定义时,明确告知函数,函数就会在调用时获取外部数据的内存地址,这种定义形参的方式叫引用传值。
引用传值在形参前面加 &
(只有变量可以引用传递)
函数体
- 定义常量
- 定义变量
- 使用流程控制
- 调用函数
函数返回值 return
返回当前函数结果,结束函数运行
作用:
- 可以将计算结果返回给调用处(函数返回值可以是任意数据类型)
- return可以在文件中直接使用,代表文件将结果return后面的内容转交给当前文件的位置
作用域
变量(常量)能够被访问的区域
三种变量
- 全局变量:函数外部定义
理论上函数内部不能访问;周期在脚本执行结束
- 局部变量:函数内部定义的变量
只允许函数内部使用,周期在函数执行结束(函数在栈区开辟内存空间运行)
- 超全局变量:系统定义的变量
没有访问限制
超全局变量$GLOBALS
想要在函数内可以访问函数外变量(还有一种办法时引用传值),可以使用超全局变量$GLOBALS,用于在 PHP 脚本中的任意位置访问全局变量
$GLOBALS[$全局变量]
global关键字
要想实现函数内外访问变量,可以使用global关键字
- 如果变量在外部存在,那么系统会将内部定义的变量直接指向外部全局变量的内存地址
- 如果变量在函数内部存在,那么系统会在外部定义一个同名的全局变量
本质就是,在函数内外,对同名变量使用同一块内存地址保存数据,从而实现共同拥有
基本语法
global 变量名 //不能赋值
变量名 = 值
一般情况下,要实现函数内外互访,会使用参数的形式来访问;或者使用常量。
静态变量
使用static关键词修饰,用来实现跨函数共享数据的变量
静态变量的值在函数的多次调用之间是持久的
基本语法
function 函数名(){
static $变量名 = 值;
}
静态变量原理
静态变量的值只会在第一次函数调用时进行初始化,之后的每次函数调用都会使用该变量的最后一个值。
静态变量的使用
- 统计当前函数调用次数
- 为了统筹函数多次调用得到的不同结果
可变函数
它在运行时允许根据变量的值来调用函数
$变量 = 'display';
function display(){
}
$变量();
也可以通过一个函数调用另一个函数
匿名函数
$变量名 = function(){
函数体
};
$变量名();
错误处理
代码执行时,发现有错误,就会通过错误处理的形式告知程序员
错误分类
-
语法错误 (Parse error)
-
运行时错误,运行时出现一些不满足的条件导致错误
(runtime error)
-
逻辑错误,写代码不规范,出现逻辑性问题
错误代号
系统错误
E_PARSE 编译错误,代码不会执行
E_ERROR fatal error,致命错误,会导致代码不能正确继续执行(出错的位置断掉)
E_WARNING warning,警告错误,不会影响代码执行,但是可能得到意想不到的结果
E_NOTICE notice,通知错误,不会影响代码执行
用户错误
E_USER_ERROR , E_USER_WARNING , E_USER NOTICE
用户在使用自定义错误触发的时候,会使用到的错误代号(系统不会用到)
其他
E_ALL,代表着所有从错误(通常在进行错误控制的时候使用比较多),建议在开发过程中(开发环境)使用
错误触发
系统运行时触发: 主要针对代码语法错误和运行时的错误
人为触发: 知道某些逻辑可能会出错,从而使用对应的判断代码来触发响应的错误提示
trigger_error('错误提示'); //默认notice,会继续执行
可以通过第二个参数严格控制 //默认error,代码不会执行
trigger_error('错误提示',E_USER_ERROR);
//默认error,代码不会执行
处理脚本让浏览器按照指定字符集解析的方法
header('content-type:text/html;charset=utf-8');
数组
数据的组合,array,将一组数据存储到多个容器中,用变量指向该容器,可以通过变量一次性得到该容器的所有数据
定义数组的方式
1、 使用 array 关键字: 最常用的
$变量 =array(元素 1,元素 2,元素 3..);
2、 可以使用中括号来包裹数据:
$变量 =[元素 1,元素 2...];
3、隐形定义数组:
给变量增加一个中括号,系统自动变成数组$变量[下标]=值 1;
默认下标从0开始,下标可以是字母、数字或者单词。如果中间手动出现较大的,那么后面的元素从最大值+1开始
多维数组
数组里面的元素还是数组
二维数组
数组中的所有元素都是一维数组
$info = array(
array('name' => 'Amy','age' => 21),
array('name' => 'Jim','age' => 25),
array('name' => 'Tom','age' => 23)
);
多维数组
和二维数组类似
不建议超过三维
异性数组
数组中的元素不规则,有普通基本变量也有数组。在实际开发中,并不常用,尽量让数组元素规则化(便于进行访问)
浙公网安备 33010602011771号