1、PHP基础语法
标准格式(XML格式)
1 |
|
script 格式
1 | <script language="php" > |
短格式
1 | 短格式 |
1 | <% asp格式 %> |
注释
1 | // 单行注释 |
2、变量及操作
程序语言就是对内存进行操作(对内存进行读写操作)
概念
变量是内存中 用于临时存储数据的一个空间,这个空间有一个名字,就是这个变量名,变量名是用于对这个内存中的数据进行引用的。
声明
语法:$变量名 = 值
说明:
php中的变量必须参 $ 开头,变量名只能包含字母/数字/下划线,只能以字母,下划线开头。
示例:
1 | $v1 = 1; |
修改变量
1 | $v1 = 10; // 定义变量 |
删除变量
1 | $v1 = 1; |
可变变量
通过一个变量,访问另外一个变量
1 | $v = 'age'; // 创建变量 |
通过一个变量,创建另外一个变量
1 | $v = 'age'; |
预定义变量
PHP为我们预先定义了一组变量,这些变量会在不同的需求中使用
- $_GET 用于接收 get 方式提交的数据
- $_POST 用于接收 post 方式提交的数据
- $_REQUEST 用于 get 或 post 方法提交的数据
- $_SERVER 记录了服务器端与客户端的相关信息緟⚠
- $_COOKIE 一种会话技术
- $_SESSION 一种会话技术
- $_FILES 用于记录用户上传的文件信息
- $_GLOBAL 用于记录全局变量
3、内存原理(形象理解)
程序语言就是对内存进行操作的
内存结构
栈区
保存变量点(术语称之为引用),
特点:对于CPU来说,读写速度是最快的
堆区
存储“复杂”的数据,数组/ 对象
数据段
存储的是简单的数据,例如:整型、浮点型、布尔值
代码段
存储的是源代码的对应的机器指令(人能看懂的计算机是看不懂的,必须经过转换)
输出缓存
只要遇到输出指令,例如:echo 、print 、print_r、var_dump,这些指令都会将所有数据都放在 输出缓存中。
PHP执行过程
- 编译阶段
- 语法检查、词法检查、代码优化
- 编译通过后将源代码转换为机器指令
特点:编译阶段错误的提示信息如下
1 | Parse error : xxxxxxxxxxx |
执行阶段
如果编译通过后,会将源代码对应的机器指令,保存在代码段,再开始执行代码段中的机器指令
程序执行结束
输出缓存中的数据会自动返回给apache ,apche 自动返回给浏览器,同时会清除栈区中的内容,同时,数据段中的数据也会被系统销毁,代码段中的数据会销毁。
PHP嵌入到HTML的执行过程
当PHP功能模块在处理一个PHP文件时,它只关心PHP代码(使用PHP标签包含的代码)。对于非PHP代码它会原样输出。
PHP仅处理<?php ?>标签内的代码,js /html /css /对于PHP来说都是字符串
PHP中变量的传值方式
在PHP中变量有俩种传值方式:
1.赋值传值
使用一个变量a为另一个变量b赋值时,传递的是变量a的值,这种赋值方式就是赋值传值。
1 |
|
2.引用传值
使用一个变量a 为另外一个变量b 赋值时,传递的是变量 a 的地址,这种赋值方式就是赋值传值
1 |
|
提示:js种不允许认为的更改传值的方式,但是php中可以使用地址符 “&”, 来将赋值传值,更改为引用传值(单向的)
4.常量
常量的概念
常量就是一种特殊的变量,也是用于存储数据,常量一旦定义就不允许修改其值,常量本身也不允许删除。
常量的定义
语法1:define(“常量名”,值)
1 | define("PI", 123 ); |
语法2:const 常量名 = 值
1 | const PE = '123'; |
说明:常量一旦定义就不允许更改
常量的值只能是基本数据类型(标量数据类型)
常量默认区分大小写,一般常量命名时,我们会大写形式。
定义区别 define VS const
define 语法可以在分支结构中定义常量,constant
1 | if(true){ |
常量的判断及获取所有常量
- defined(常量名称);
1 | // 定义一个常量 |
- 获取所有的常量
1 | // 获取所有常量 |
魔术常量
- FILE 获取前文件夹名完整路径及文件名
- DIR 获取前文件夹名的路径
- LINE 获取代码行号
- FUNCTION 获取当前函数的函数名
- METHOD 获取当前方法的方法名
- CLASS 获取当前类的类名
- NAMESPACE 获取当前空间的空间名
1 | // 魔术常量 |
5.数据类型
PHP数据类型分为三大类八小类
数据类型分类
- 标量类型
- int 整型
- float 浮点类型
- boolean 布尔类型
- string 字符串
- 复合类型:
- array 数组
- object 对象
- 特殊类型
- null null
- resource 资源类型
整数(int)类型
线性的整数
十进制
1 | $v1 = 255; |
八进制
以0开头,并且不能有超过7的数字
1 | $v2 = 076; |
十六进制
以0开头,包含0-9, a()-f
1 | $v3 = 0xFF; |
浮点类型
带有小数点的数,就是浮点数。
小数有俩中表达方式:
1 | // 普通方式 |
字符串(string)类型
使用单引号定义字符串
1 | $str1 = 'hu \'feifei '; |
使用双引号定义字符串
1 | $str2 = "hu \"feifei"; |
heredo 定义字符串
用于定义字符串,主要应用场景是定义大段的字符串非常方便。
1 | $heredoc = <<<abc |
转义符:\
用于将程序语言所赋予的某写字符的特殊功能转义掉。
输出不可见的符。
布尔(boolean)类型
true-成立
1 | if(true){ |
false-不成立
1 | if(false){ |
数组(Array)类型
索引数组
数组元素的下标是数值,这样的数组就是索引数组。
关联数组
数组元素的下标是字符串,这样的数组就是关联数组。
数组元素的访问:
1 | // 访问_SERVER数组中的下标为REMOTE_ADDR的元素 |
null(null)类型
null类型只有一个值,null
资源(resource)类型
resource类型,资源数据类型也是一个特殊的变量,程序员没有办法直接定义一个资源,必须使用PHP提供的获取资源的函数
1 | // fopen('资源名称','打开方式') 获取资源函数 |
6.数据类型的转换
什么时候会出生数据类型的转换。
数据就是用于运算,当参与运算的俩个数据,类型不同时,PHP会自动进行转换。
有时候我们也会进行强制转换。
自动转换
1 | $i = 100; |
强制转换
类型 | 说明 |
---|---|
(integer) | 将其他数据类型强制转换为整型 |
(float) | 将其他数据类型强制转换为浮点型 |
(string) | 将其他数据类型强制转换为字符型 |
(boolean) | 将其他数据类型强制转换为布尔型 |
(array) | 将其他数据类型强制转换为数组 |
(object) | 将其他数据类型强制转换为对象 |
1 | $v1 = 10; |
数据及类型的判断
判断函数的格式规律
方法 | 说明 |
---|---|
is_int(v) | |
is_string(v) | |
is_bool(v) | |
is_float(v) | |
is_scalar(v) | 判断变量的类型是否是 int/string/bool/float |
is_array(v) | |
is_object(v) | |
is_resourece(v) | |
is_null(v) | |
isset(v) | 用于判断变量是否有设置值为 null |
empty(v) | 用于判断变量v 的值是否为”空”,布尔false的值都被empty认为是空。 如果是空则返回 “true”, 如果是不是空则返回”false” /。 (空的返回true,不是空的返回false) |
实例:
1 | $v1 = 10; |
7.运算符
赋值运算符
运算规则: 将赋值号右边的值赋值给左边的变量,左边必须是变量不能是式子。
1 | $i = 10; |
算数运算符
加减乘除 / 取余
运算规则: 取俩个数相除,余下的那个数。
1 | $a = 5; |
1 | $i = 5; |
自操作运算符
自增运算符
前自增
规则:先对变量的值自增1,再使用变量的新值参与式子的运算
1
2
3
4
5
6$v = 10;
$r = ++$v ;
echo $r; // 11 先自增
echo "<br/>";
echo $v; // 11后自增
规则:先使用变量的原值参与式子的运算,在对变量的值进行加1.
1
2
3
4
5$v = 10;
$r = $v++;
echo $r; // 10
echo "<br/>";
echo $v; // 11 后自增综合练习
1
2
3
4
5
6
7$v = 10;
$re = $v + ++$v + $v++ + $v++ + $v++;
// 11 + 11 + 12 + 13 + 14
echo $re;
// 说明: ++前 ,是先更改内存中的变量的值,再将新值读取到这个式子中。(先自增,再运算)
// 后++ ,是先取内存中的这个变量的值,放在式子中,在对变量的值加1。(先运算,再自增)
自减运算符
前自减
规则:先对变量的值自增1,再使用变量的新值参与式子的运算
后自减
规则:先使用变量的原值参与式子的运算,在对变量的值进行加1.
字符串运算符
1 | $tab = "<table border='1' rules = 'all'>"; |
注意:
1 | $str = '$i的值为:' . 10; // 如果作为.来接收一个数值,数值与.之间要有空格 |
比较运算符
1 | > |
提示:比较运算符,最终得到的结果是 boolean 类型的值。
逻辑运算符
&& 逻辑与
1 | $v1 = true; |
真值-运算规则:参与运算的俩个操作数,如果同时为true或能转换为true,那么最终结果就是true。
假值-运算规则:参与运算的俩个操作数,如果同时为false或能转换为false,那么最终结果就是false。
逻辑与短路
1 | $v1 = true; |
逻辑与短路:根据逻辑与的假值运算规则,由于第1个操作数$v2值就是false,最终结果就为false,没有必要再计算第2个式子了,所以++n 并没有运行,形象称之为逻辑与短路。
and 逻辑与
1 | 运算规则与&&,运算规则相同,唯一区别是&& 的优先级高于 = ,而 and的优先级是低于 = |
逻辑或 ||
1 | $v1 = true; |
真值-运算规则:参与运算的俩个操作数,只要有一个为true或者能转换为true ,最终结果就为true。
假值-运算规则:参与运算的俩个操作数,全为false或能够转换为false,则结果为false。
逻辑或短路
1 | $v1 = true; |
逻辑与短路:根据逻辑与的假值运算规则,由于第1个操作数$v1值就是true,最终结果就为true,没有必要再计算第2个式子了,所以++n 并没有运行,形象称之为逻辑或短路。
or 逻辑或
1 | 运算规则与 || 运算规则相同,唯一的区别是 || 的优先级高于 = , 而or 优先级低于 =; |
! 逻辑非
1 | $v1 = true; |
对操作数进行取反
$v = ?;
!!$v;
注释:上面代码是转换为布尔值。类似于强制转换
运算符的优先级:
在一个式子中可能会出现很多种运算符,但运算符之间有优先级。
运算口诀:单步 - 算术 - 关系 - 逻辑 - 条件 - 赋值 - 逗
三元运算符
语法:表达式?表达式A :表达式B
运算规则:先计算表达式是否成立,如果成立取表达式A的值,如果不成立取表达式B的值。就是简单的分支语句。
1 | $v1 = 10; |
扩展
语法: 变量?:表达式B
运算规则:如果变量能转换为true,那么就取变量,否则就取表达式b
1 | $v1 = 10; |
错误控制运算符
@ 错误抑制符
不显示错误信息(避免暴露服务器地址用户名以及密码)
1 | // 连接收数据库函数 |
PHP.ini 隐藏信息错误
php.ini 全局配置文件中(display_errors = On)不显示错误
说明:这种配置影响全局,所有使用此份php的配置文件的站点都受到此影响
脚本级的错误控制
脚本级的错误控制仅限于当前的php脚本文件
ini_set() 主要用于php脚本中来设置php.ini中的配置项
语法:ini_set(配置项名,值);
1 | // 设置配置值 |
ini_get() 主要是用于获取php.ini中配置项的值
1 | // 获取配置值 |
位运算符(了解)
8. PHP.exe
PHP内置的web服务器
php.cli
PHP 的命令行模式
php-m
查看PHP所有加载的功能模块
PHP—ini
配置文件信息
PHP -f 文件名
PHP -r “一行php命令”
9.进制转换函数
atc decimal 十进制
bin binary 二进制
oct octet 八进制
hex hex 十六进制
decbin() 十进制转换为二进制
dechex() 十进制转换为十六进制
decoct() 十进制转换为八进制
10.PHP中的输出语法
echo 只能输出变量数据类型,对于任何数据都要转换为字符输出, 没返回值。
print() 只能输出变量数据类型,对于任何数据都要转换为字符输出, 有返回值 。
print_r 可以输出标量,以及符合类型(数组),但布尔值还是需要转换。
var_dump() 主要用于程序员进行代码调试,输出十分详细的信息。(输出数据类型,以及值)
sprintf() 用于格式化输出
语法: sprintf(格式化字符串,变量1,变量2,…..)
说明:
1 | 格式化占位符有 |
%b 二进制
%d 十进制
%o 八进制
%f 浮点
%x 十六进制
1 | echo sprintf('10 二进制为:%b',$v1); |
11.流程控制
计算机中的流程控制可分为三种
顺序结构
程序自上而下的一个执行过程
分支结构
根据某一条件将程序转向不同的分支处执行
循环结构
计算机最大的特点计算速度快,计算机主要用于解决重复性的问题
12.分支结构
1 | // 解决浏览器乱码问题 |
单分支
1 | $sex = '男'; |
双分支
1 | $sex = 'mail'; |
多分支
1 | $sex = 'mail'; |
13.switchh 结构
当一个问题需要判断的条件比较多时,PHP又提供了一个switch分支结构。
1 | $sex = 7; |
if vs switch 区别:
if结构的条件可以表示一个范围。
switch结构主要用于表示一个具体的值。
14.for循环
循环结构主要是用于解决重复性的问题.
1 | // 语法 |
例如:
1 | for( $i = 1; $i <= 100; $i ++){ |
对于for循环结构,要求:
1.能够使用for循环,模拟任意次数的循环。
2.能够使用循环控制变量来模拟数据或数据规则(规律)
使用程序语言解决问题的思路:
1.首先要判断使用何种流程控制,
2.再将问题种的条件转换为计算机能够表达的式子
99乘法表格
1 | // 外层循环,控制行 |
课堂案例
百钱百鸡,100文钱,买100只鸡,公鸡5文1只,母鸡3文1只,小鸡1文3只
穷举法:
1 | for($cock = 1; $cock <= 100; $cock++){ |
计数器(循环次数)
1 | $count = 0; |
优化百钱百鸡
1 | $count = 0; |
while 循环
do…while循环
循环的结束与退出
continue 【n】
说明: 跳出当次循环
break【n】
说明: 直接结束循环
15.流程控制语句的标签语法
PHP在将PHP代码嵌入到html文档中,又提供了一种标签语法。
1 |
|
if标签语法
1 | if(...){ |
for标签语法
1 | for(){ |
16.文件载入
介绍
在实际开发过程中,经常会在PHP文件中引入其他的文件,被引入的文件可以上html,也可以是PHP文件。
1.require
require(文件名)
1 | // 03tese文件夹 |
1 | // test.html文件(模版渲染文件) |
require_once(文件名)
使用目的:
1.当前文件(PHP)有数据,想在被引用的文件(html)中显示。
2.当前文件(PHP)想使用,另外一个文件中(PHP)的功能性代码。
2.include
include (文件名)
1 | // 文件A |
include_conce(文件名)
3.引入路径问题
4.include与require 区别
5.DIR__ FILE
20.字符串
使用单引号或双引号扩起来的0个或多个字符。
单引号:
不能解析变量的值,能够被转义的 \ \ —— \
双引号:
能够解析变量的值,都能被转义
heredoc 本质就是使用双引号定义大段的文本,只是另一种方式进行书写。
nowdoc 本质就是使用单引号定义大段的文本,只是另一种方式进行书写。