了解PHP
PHP 是服务器端脚本语言。
PHP是什么?
- PHP(全称:PHP:Hypertext Preprocessor,即”PHP:超文本预处理器”)是一种通用开源脚本语言。
- PHP 脚本在服务器上执行。
- PHP 可免费下载使用。
PHP 能做什么?
- PHP 可以生成动态页面内容
- PHP 可以创建、打开、读取、写入、关闭服务器上的文件
- PHP 可以收集表单数据
- PHP 可以发送和接收 cookies
- PHP 可以添加、删除、修改您的数据库中的数据
- PHP 可以限制用户访问您的网站上的一些页面
- PHP 可以加密数据
通过 PHP,您不再限于输出 HTML。您可以输出图像、PDF 文件,甚至 Flash 电影。您还可以输出任意的文本,比如 XHTML 和 XML。
为什么使用 PHP?
- PHP 可在不同的平台上运行(Windows、Linux、Unix、Mac OS X 等)
- PHP 与目前几乎所有的正在被使用的服务器相兼容(Apache、IIS 等)
- PHP 提供了广泛的数据库支持
- PHP 是免费的,可从官方的 PHP 资源下载它: www.php.net
- PHP 易于学习,并可高效地运行在服务器端
总而言之,php是一种语言,和我们的汉语、英语一样。
我们使用汉语和别人交流是为了达到某一目的。比如说我现在和你们说话是为了给你们讲解PHP,这就是我的目的。
使用PHP是为了让机器实现我们所需要的目的
PHP语法
基本的 PHP 语法
PHP 脚本可以放在文档中的任何位置。
PHP 脚本以 结束:
<?php
// PHP 代码;
?>
PHP 文件的默认文件扩展名是 “.php”。
PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。
PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。
实例hello.php
#我的目的是输出Hello World!
<?php
echo "Hello World!";
?>
在服务器上执行看看是不是输出Hello World!
很明显我们的目的达成了,成功的输出了Hello World!
解析hello.php
在hello.php中我们只有一行代码
echo "Hello World!";
这一行代码有以下几个问题
- echo是干嘛的
- 在PHP,有两种在浏览器输出文本的基础指令:echo 和 print。
- 为什么双引号没有输出
- 这是因为我们有字符串的概念,所有字符串必须使用同一种单或者双引号来定义开始和结束。所以可以理解为一种特殊的符号。
- 如果不加引号看看会出现怎样的情况
- 很明显之间出现了,报错信息。因为没有加引号php会将其当做数字或者命令来执行,但是这既不是数字又不是命令,所以就出现了报错信息。
人人都会编程
练习1
#lianxi1.php
<?php
$sex = '男';
if($sex == '男')
{
echo '帅哥,前面的网吧有活动快去看看吧'; #haha
}
else
{
echo '美女,前面的化妆品店有活动快去看看吧';
}
?>
$sex是什么意思?
在php中$符号表示变量,变量名为sex。虽然变量名可以随便取(有命名规范),但是一般代码中的变量名都具有一定的含义因为这样方便使用
“==”:为什么要两个等于号?
这是因为在编程语言中,一个等于号表示赋值,两个等于号表示比较。所以这里就是比较变量sex的值是不是等于男
if……else……
这是一个条件判断语句,如果if后面的条件满足,就会执行后面花括号的内容;如果if后面的条件不成立,就会执行else后面花括号的内容
下面来执行代码
这里出现了报错信息
我们分析一下报错信息,这里提示说在第六行,然后逗号或者分号有错误,然后我们查看一下源码
很明显可以看出来这个分号和第十行的分号长的不太一样,所以这就是一个注意点,大家在编程的时候无论是php还是python等一定要注意标点符号的中英文模式
修改之后再次执行
此时查看显示的是一串乱码,这个很正常直接修复文字编码就可以了
此时感觉好像对也不对,为什么我们的“#lianxi1.php”这串字符直接输出了呢?我们也没加echo啊。为什么有echo的“#haha”又没有输出你?
这是因为我们说过php代码的范围是<?php xxxxx ?>,而我们的#lianxi1.php在我们的范围之外,所以会直接当做txt文件来显示所以之间就输出了
第二个#haha在我们的php范围内,但是#是我们php中的注释符,注释符后面的内容是不会进行处理的,所以不会输出
注释符
<?php
// 这是 PHP 单行注释
# 这是 PHP 单行注释
/*
这是
PHP 多行
注释
*/
?>
变量
变量是用于存储信息的”容器”
每个同学都有银行卡,用于存钱,这个银行卡就是变量,具体有多少钱是会发生变化的,但是变量名是不变的,可以不用,但是定义好之后就是固定的
练习2
<?php
$age = 1;
echo $age;
echo "\n";
$age = 2;
echo $age;
echo "\n";
$age = $age + 1; #表示先将$age加1,再重新赋值给$age
echo $age;
echo "\n";
$age = $age * 5; #表示先将$age乘5,再重新赋值给$age
echo $age;
echo "\n";
?>
PHP 变量规则:
- 变量以 $ 符号开始,后面跟着变量的名称
- 变量名必须以字母或者下划线字符开始
- 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
- 变量名不能包含空格
- 变量名是区分大小写的($y 和 $Y 是两个不同的变量)
变量可以是很短的名称(如 x 和 y)或者更具描述性的名称(如 age、carname、totalvolume)。
运算符
我们常用的运算符有加减乘除,还有比较运算符大于小于等于这些在PHP中也有应用
练习3
<?php
$a =5;
echo $a+1;
echo "\n";
echo $a-1;
echo "\n";
echo $a*2;
echo "\n";
echo $a/2; //除
echo "\n";
echo $a%2; //取余
echo "\n";
?>
练习4
<?php
$zhang = 18;
$li = 19;
if($zhang == $li)
{
echo '张先生与李小姐同岁';
}
else
{
echo '张先生与李小姐不同岁';
}
?>
练习5
<?php
$zhang = 19;
$li = 19;
if($zhang > $li)
{
echo '张先生比李小姐年龄大';
}
else
{
echo '张先生比李小姐年龄小';
}
?>
他俩明明是同岁,但是因为这里我们的条件判断的不严谨导致不合理的输出
练习6
<?php
$zhang = 19;
$li = 19;
if($zhang >= $li)
{
echo '张先生不比李小姐年龄小';
}
else
{
echo '张先生比李小姐年龄小';
}
?>
此时就合理了
练习7
<?php
$zhang = 18;
$li = 19;
if($zhang != $li)
{
echo '张先生与李小姐不同岁';
}
else
{
echo '张先生与李小姐同岁';
}
?>
至此我们学习了常用的运算符
加:+
减:-
乘:*
除:/
取余:%
等于:==
不等于:!=
大于:>
小于:<
大于等于:>=
控制结构
顺序结构
从上往下依次执行,比如我们的练习3和练习2就是顺序结构逐行执行
分支结构
通过条件的判断,来选择性的执行有关内容,比如我们的练习4练习5这些if……else……的结构就是分支结构,满足if后面的条件执行if后面的分支语句,如果不满足执行else后面的分支语句
循环语句
练习8
<?php
$a=1;
while ( $a < 8 ) #如果a小于8进行循环
{
echo '今天星期'$a; #循环的内容为输出今天星期几
$a++; #$a=$a+1的简写
}
?>
执行之后发现报错
这是因为我们无法直接将'今天星期'$a连接在一起输出,需要在中间加一个并置符号“.”,修改代码之后如下
<?php
$a=1;
while ( $a < 8 )
{
echo '今天星期'.$a.'<br />'; #加一个<br />用于换行显示,美观一些
$a++;
}
?>
这就是一个经典的循环语句,如果满足条件一直循环,直到条件不满了跳出循环。如果这里没有$a++这条命令,会无限循环下去,这称之为死循环。编程中需要注意是否需要死循环,如果不需要一定要检查自己的代码是否有死循环
作业
打印1-100
打印1-100偶数
遇到7的倍数 打印字符A
遇到13的倍数 打印字符B
字符串的处理
一个字符串是一串字符的序列,就像 “Hello world!”。
单双引号的区别
之前我们也说了我们引用字符串的时候需要使用引号,下面就来说说单双引号的区别
单引号
<?php
$a = 1;
echo '$a';
?>
双引号
<?php
$a = 1;
echo "$a";
?>
PHP 会解析双引号中的变量,而不会解析单引号中的变量。也就是说,如果使用单引号定义的字符串中出现变量,在输出时变量会被原样输出,不会解析成变量的值。而如果使用双引号定义的字符串中存在变量,在输出时变量会被解析为具体的值。
转义字符
有些时候我们的字符串中是会有单引号或者双引号需要输出的,比如说I‘m zhangsan这样一句语句我们要怎样使其输出呢?
<?php
echo 'I'm zhangsan';
?>
如果这样写能过输出我们期望的结果吗?
很明显的之间出现了报错,这是因为我们之前说了,引号需要成对出现,就像一对爱人一样你非要拆散被人做第三者插足的事情这肯定是不合理的
那么应该如何解决呢?
我们可以将外面的单引号修改为双引号,这样中间出现的一个单引号就会直接当做字符进行输出了
<?php
echo "I'm zhangsan";
?>
这样输出I'm zhangsan的目的是达到了,但是很多时候代码已经编写好了,给我们的只有一个输入框我们并不能改变它,我们能够控制的之后单引号之间的内容,此时就可以使用转义字符(\)
<?php
echo 'I\'m zhangsan';
?>
数组
数组是一个能在单个变量中存储多个值的特殊变量。之前说了变量是一个容器,是一个盒子。而数组是一个更大的盒子,里面存放着一个个的小盒子
类比商场的储物柜,我们可以将自己的东西存储在其中的一个小储物柜中(比如说001号储物柜),然后关上门拔走钥匙。当我们购物完之后要取走我们的东西,会根据要是上的储物柜号码去找我们存在哪的,找到之后开柜门取东西。
这里的号码牌就是这个储物柜的标识,是唯一的不能重复,如果重复了你还怎么找,在数组中这个标识称之为key(键)——独一无二不会重复,然后我们存在这个柜子里的东西在数组中称之为value(值)——这个可以重复,比如我存放的是一把伞,别人也可以存放一把伞。
创建数组
在 PHP 中,array() 函数用于创建数组:
array();
在 PHP 中,有三种类型的数组:
- 数值数组 – 带有数字 ID 键的数组
- 关联数组 – 带有指定的键的数组,每个键关联一个值
- 多维数组 – 包含一个或多个数组的数组
输出数组
php输出数组有两个函数
- print_r(),该函数可以将整个数组的内容及结构进行输出,且会按照一定格式显示键和元素,语法“print_r(数组变量)”。
- var_dump(),可以将整个数组的数据内容及结构进行输出,可以输出数组元素的相关信息(类型与值),输出数组时,数组将递归展开值,通过缩进显示其结构,语法“var_dump(数组变量)”。
练习8
<?php
$a = array('001' => '雨伞','002' => '手机','003' => '电脑'); #创建一个关联数组a
print_r($a); #输出数组a
echo "<br />";
var_dump($a); #输出数组a
?>
虽然二者都能输出数组,但是输出的结果略有不同,这个可能感觉还不是很明显我们使用下面的代码
<?php
$b = 1;
print_r($b);
echo "<br />";
var_dump($b);
?>
这个就很直观的感受到了,var_dump会将其字符类型一起输出。print_r只输出值
php是一个弱类型语言,所以字符类型不需要过多的关注,但是简单的字符类型还是需要知道的,int,str,array
输出数组中的值
练习9
<?php
$a = array('001' => '雨伞','002' => '手机','003' => '电脑'); #创建一个关联数组a
echo $a['001']; #输出键001对应的值,注意我们定义键的时候用来引号表示字符串,所以这里也需要有引号,如果是数字类型的就不需要加引号
?>
传参
PHP 超级全局变量
PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。
PHP 超级全局变量列表:
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
这里我们重点介绍$_GER
,$_REQUEST
,$_POT
$_GET
简介
GET页面提交方式:参数都体现在url上,可以用于翻页,简单查询,get只能接收2M以下的内容,所以有局限性,另外由于内容是可见的,安全性就下降了
$_GET
变量用于收集来自 method=”get” 的表单中的值,直观的的就是浏览器中可以看到的参数,那么“?”后面的参数都是可以用 $_GET
获取,各个参数是以’&’作为分隔符的。
例如https://www.bilibili.com/video/BV1V54y1y7c4?p=1&vd_source=26
$_GET 变量是一个数组,内容是由 HTTP GET 方法发送的变量名称和值。
从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多 100 个字符),所以参数的长度不是无限的,但是基本都能满足我们的要求了。
练习9
<?php
var_dump($_GET); #查看一下变量GET是一个什么类型的
?>
很明显可以看出来这是一个数组
使用数组
我们在URL地址栏输入了
?haha=1
发现我们的GET数组中有键值对了,内容就是我刚刚输入的等号两边的内容
那么我们可不可以使用GET数组和if语句来实现一些功能呢?
<?php
var_dump($_GET);
if($_GET > 60)
{
echo "恭喜你考试及格";
}
else
{
echo "很遗憾你考试不及格";
}
?>
我们什么都没有输入,直接显示的恭喜你考试及格。这是因为数组无法直接用来作比较,所以我们需要提取其中的值
<?php
var_dump($_GET);
if($_GET['fenshu'] > 60)
{
echo "恭喜你考试及格";
}
else
{
echo "很遗憾你考试不及格";
}
?>
此时就可以正常使用了,当然我这边的条件判断写的不严谨这个不关键
$_POST
简介
上面我们做了一个简单的判断学生是否考试及格的小实例,但是正常来说做一个学生成绩系统不会再在URL中让你输入成绩然后判断是否及格,一般都是通过POST方式来进行传递的。
post页面提交方式:用于页面表单 提交,上传文件,这些操作。大小没有限制,也不会在地址栏上显示。
$_POST
变量是一个数组,内容是由 HTTP POST 方法发送的变量名称和值。
$_POST
变量用于收集来自 method=”post” 的表单中的值。从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。
表单
表单在网页中主要负责数据采集功能。
表单的组成
表单标签:这里面包含了处理表单数据所用动态脚本的URL以及数据提交到服务器的方法。
表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。
表单按钮:包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的动态脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。
表单的使用场景
- 登录框
- 搜索框
- 留言框
- 上传框
- ……(各种框)
表单标签
<form action= "URL" method="GET/POST" >
表单域
即表单组件,主要有
- 文本框、密码框、隐藏域、复选框、单选框、文件上传框
- 多行文本框(文本域)
- 下拉选择框
- ……
表单按钮
- 提交按钮
- 复位按钮
- 一般按钮
常用表单代码
练习10
制作表单1.html
<form action = 'post.php' method='post'>
<input type='test'/>
<input type='submit'/>
这就是一个简单的输入框了
制作post.php
<?php
var_dump($_POST);
?>
访问1.html后点击提交就会将数据传到post.php上,然后在post.php上进行处理
点击提交之后页面确实跳转到了post.php上但是发现并没有数据传递过来
这是因为我们没有给传递过来的参数命名,所以无法进行利用(没有指定键名,所以值无法保存)
修改1.html
<form action = 'post.php' method='post'>
<input type='test' name='fenshu'/>
<input type='submit'/>
刷新页面重新填写数据并提交
成功通过post传参获取到了数据
修改post.php
<?php
var_dump($_POST);
if($_POST['fenshu'] >= 60)
{
echo "恭喜同学成绩合格";
}
else
{
echo "很遗憾同学成绩不合格";
}
?>
上传分数59进行验证
提示不合格
上传分数60,进行验证
提示合格
作业
将成绩通过ABCDE来表示,A为优秀,B为良好,C为一般,D为及格,E为不及格
$_REQUEST
如果即想使用GET传参,也想使用POST传参,可以使用REQUEST传参。
$_REQUEST
做$_GET
用
<?php
var_dump($_REQUEST);
if($_REQUEST['fenshu'] > 60)
{
echo "恭喜你考试及格";
}
else
{
echo "很遗憾你考试不及格";
}
?>
$_REQUEST
做$_POST
用
<?php
var_dump($_REQUEST);
if($_REQUEST['fenshu'] >= 60)
{
echo "恭喜同学成绩合格";
}
else
{
echo "很遗憾同学成绩不合格";
}
?>