PHP基础篇
PHP的工作流程:
-
-
拿Apache举例,它接收到数据后,转交给PHP来处理这些数据。
-
PHP与数据库交互,比如Mysql,通过查询或其它操作访问数据。
-
数据库将访问操作的数据返回给PHP让它再去处理。
-
PHP再去处理这些数据,整理成网页能看到的样式,然后返回给Web服务器。
-
Web服务器接收到了PHP整理好的数据后,将其打包成HTTP协议返回给客户端。
一、变量与其数据类型
变量为一种可变化、可根据所需将其赋值的量。
变量使用规则:
1、变量必须以 $ 符号开始
2、变量不能使用数字开头
3、变量开头可以下划线 _ 开始
4、变量名不能是PHP常用的关键字
5、变量大小写敏感,$a 与 $A 是两个变量
举例:
<?php
$a = 1;
$b = "7089bAt";
echo $a;
echo '<br>';
echo $b;
echo '<br>';
$c = 5;
$d = 6;
$e = $c + $d;
echo $e;
?>
解读:
在上面代码中使用了 = 进行赋值,即把右边的数据给左边,这时 $a 不在孤独了,它有了整型 1 陪伴,而 $b 也有了字符串 7089bAt 陪伴,还有下面的变量。在下面用了个最最最简单的计算来了解一些变量最基本的作用。
在程序中,可以对不同类型变量,进行不同的操作。在进行变量操作时,已声明的变量会被计算机内存分配一块区域存放你所赋的值,即 $a 在内存中有一小块区域,其里面存放着 1 这个整型。以后再去使用变量 $a 时知道它是个整型 1 ,可以根据你的需求来使用它。这个值是可以根据需求变化的,而且 $a 这个变量只在本代码段里的值是 1 。
二、变量的数据类型
1、四种标量类型
-
布尔型(boolen)
-
整型(integer)
-
浮点型(float)
-
字符串(string)
2、两种复合类型
-
数组(array)
-
对象(object)
3、两种特殊类型:
-
资源(resource)
-
Nul
4、详细介绍
四种常用的标量数据类型,知道是什么怎么用即可
4.1 布尔型(boolen)
它只有真(True)和假(False)两个值。在PHP中,可以将任何类型的值都转换为真或假。比如:整型数值零(0)、浮点型(0.0)、空白字符串(””)为假,其它如-1、1、0.1为真
例如:
<?php
$a = true;
if($a == true){
echo "<h1>工作室</h1>";
}
?>
解读(布尔类型常在条件语句中使用):
首先,将 $a 赋值为 true ,接下来,在条件语句中的条件判断处进行判断,即 $a == true ,( == 两个等于号是判断的意思, = 一个等于号是赋值的意思)。将 $a 赋值为 true ,所以说 $a == true 条件是成立的,下面就会执行 输出“工作室”这句话。
4.2 整型(integer)
四种标量类型之一,其数据类型只能为整数(正整数或负整数)。
其区间参考下面链接:https://www.php.net/manual/zh/language.types.integer.php
给定的数值超出最大范围叫做整数溢出,会被当做浮点型处理。
4.3 浮点型(float)
四种标量类型之一,它是有小数位的,并且精度会比整数大的多。
具体精度可看:https://www.php.net/manual/zh/language.types.float.php
比如: $a=3.14; , $b=-0.12; , $c=70.89; 这些都是浮点型。
4.4 字符串(string)
四种标量类型之一,字符串即连续的字符序列,可以是数字、字母或符号。
定义字符串的三种方式:
-
单引号(’ ‘)
$a = '123aBc';
-
双引号(” “)
$b = "123abc";
-
定界符(<<<)
定界符用于定义格式化的大文本,其输出格式会按照你在定界符中所敲打的形式输出。
<<<str
格式化文本
str;
举例:
<?php
echo <<<"txt"
"Kalpa"工作室
我是'Kalpa'
Hello World!
"\n"换行有效
txt;
?>
<?php
echo <<<'txt'
Kalpa工作室
我是"Kalpa"
Hello World!
"\n"换行无效
txt;
?>
备注:
定界符开头的声明和结尾必须一样,结束的标识符必须在新的一行开头,并用 ; 结束。
注意:
单引号与双引号定义字符串区别:
在单双引号中包含变量名时,双引号将其变量值输出,而单引号只会当普通字符输出。
PHP函数 var_dump(变量名) 可以查看数据类型。
<?php
var_dump(1);
echo '</br>';
var_dump('1');
echo '</br>';
var_dump(1.0);
echo '</br>';
var_dump(TRUE);
?>
-->
int(1)
string(1) "1"
string(3) "1.0"
bool(true)
三、常量
常量在脚本中是初始化的值,不会变的值。一般在程序中定义了常量之后,在整个程序中这个值都是固定有效的。
1、自定义常量
关键字 – define()
define(string constant_name, mixed value, case_sensitive=true)
参数(string constant_name):必选参数,常量名称。
参数(mixed value):必选参数,常量的值。
参数(case_sensitive=true):可选参数,指定是否大小写敏感,true为不敏感。
2、获取常量值
关键字 – constant(),defined()
关键字是程序中的保留字,每个字符都有特定的含义,处理程序时只认这些关键字,也会根据关键字处理相应功能。
1、constant(string constant_name)
参数(string constant_name):常量的名称
指定获取某常量,如果成功,返回正常值,如果失败,则提示错误信息(常量没有被定义)
2、defined(string constant_name)
参数(string constant_name):常量的名称
指定获取某常量,如果成功,返回true,如果失败,返回false
四、运算符与表达式
1、运算符
运算符,是对常量,变量或数据进行计算的符号。比如,= 是赋值运算符,== 是比较运算符,算术运算符 +、-、*、/ 等,除了这些还有很多运算符,有不同的作用。
PHP中有以下运算符:
算术运算符
字符串运算符
赋值运算符
比较运算符
条件运算符
递增或递减运算符
位运算符
逻辑运算符
1.1 算术运算符
就是常见的 加,减,乘,除,取余,所使用的的符号为 +,-,*,/,%
1.2 字符串运算符
字符串运算符就是对字符串进行基本操作。
比如使用英文句号 . ,是将两个或多个字符串连接起来形成一个新的字符串。
1.3 比较运算符
比较运算符就是对变量或表达式的值进行大小、真假比较,根据比较返回true或false。
1.4 逻辑运算符
在程序中逻辑运算符是比较中要的一种运算符。
&&或and:($a && $b)逻辑与,当两者都为真时,结果为真
||或or:($a || $b)逻辑或,但两者其中一者为真的时候,结果为真
!:逻辑非,(!$a)是个英文的感叹号,当$a为假时,结果为真
xor:逻辑异或,($a xor $b),当$a,$b为一真一假时,结果为真
更多运算符符号及使用方法,还有运算优先级可以参考:
https://www.runoob.com/php/php-operators.html
2、表达式
表达式是PHP语言的基本元素,它是将运算符和操作数连接起来的式子。
$a=7089 这个赋值操作就是最简单的表达式,还有上面逻辑运算符两者比较,也是表达式。
表达式多搭配用于条件语句,循环语句。
五、条件判断语句
在编写程序时常用到条件语句,而且会与一些表达式,搭配使用,关系相当密切。
条件语句就是对一件事的判断,根据判断结果做出一项选择。比如抛硬币,如果正面朝上,我亲你,如果反面朝上,你亲我。这就是一个简单的条件语句的判断。(虽然很不要脸 -.-)
条件表达式关键字
if
if...else
if...elseif...else
switch...case
1、if语句
if语句是最简单的条件判断语句。它判断一个条件,如果条件成立,就执行下面语句,如果不成立,则跳过这段程序,执行下面程序。
例如:
<?php
$a=9;
$b=9;
if($a == $b){
echo "嘿嘿,我们两是一对";
}
?>
在代码中,通过算术运算符将两个变量进行赋值,在if判断中结果True(两个变量相等),就执行下面那句代码,使用到的 == 两个等号是比较运算符。
2、if…else语句
if…else语句有两个结果。它判断一个条件,如果条件成立就执行 if 下面的语句,如果条件不成立的,就执行 else 下面的语句。
例如:
<?php
$a=1;
$b=2;
if($a == $b){
echo "嘿嘿,我们两是一对";
}
else{
echo "可惜我们不是一对";
}
?>
此处使用到了 == 两个等号,也就是比较运算符。在if条件中进行判断数值是否相等,成功则执行if的语句,不成功则执行else的语句
3、if…else if…else多条件语句
多条件语句根据成立的条件不同来返回结果。此语句在上一条语句的基础上,if语句如果执行失败,将再次判断一个esleif语句,执行效果与if同效力。
<?php
$day = 6;
if($day == 4){
echo "今天是疯狂星期四!!!";
}elseif($day==1 || $day==2 || $day==3 || $day==5 || $day==6 || $day==7){
echo "今天又是努力的一天!";
}else{
echo "输入错误!";
}
?>
<?php
$t = date("H");
if ($t<"10"){
echo "Have a good morning!";
}elseif ($t<"20"){
echo "Have a good day!";
}else{
echo "Have a good night!";
}
?>
-->Have a good day!
如果当前时间小于10,将输出”Have a good morning!”,如果当前时间不小于10且小于20,则输出”Have a good day!”,否则输出”Have a good night!”。
4、switch…case语句
switch…case分支控制语句,对于一个条件进行判断,根据结果和case中的值对比,如果相等,就执行对应的语句,直到switch语句结束或遇见break。
<?php
switch (n)
{
case label1:
如果 n=label1,此处代码将执行;
break;
case label2:
如果 n=label2,此处代码将执行;
break;
default:
如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}
?>
例如:
<?php
$ta = "xiaoli";
switch($ta){
case "xiaoli":
echo "小李舔狗!";break;
case "xiaozhang":
echo "小张个高!";break;
case "xiaowang":
echo "小王白净!";break;
case "xiaozhao":
echo "小赵腿长!";break;
default:
echo $ta."同志是谁?";break;
}
?>
这段代码使用 switch…case 语句,先设置一个变量其值如上,然后使用该和 case 下设定的值比较,如果比较条件成功,就会执行响应的语句,如果设置了一个case没有的值,就会执行 default 下的语句。
代码中出现的break也是PHP中的关键字,它的意思是跳出这次执行,跳出switch语句。如果不使用 break 的话,程序自动执行完剩下的代码,然后退出。
<?php
$favcolor="red";
switch ($favcolor){
case "red":
echo "你喜欢的颜色是红色!";break;
case "blue":
echo "你喜欢的颜色是蓝色!";break;
case "green":
echo "你喜欢的颜色是绿色!";break;
default:
echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?>
-->你喜欢的颜色是红色!
六、循环语句
所谓循环,哲学点说就是某件事物周而复始的运动或变化。程序语言中的循环是个闭环,从头开始到结尾然后再从头开始。
PHP语言中的四种循环结构分别是: while循环、do…while循环、for循环、foreach循环。
1、while循环
同if效果,只需单一的条件,如果条件成立,就循环执行代码块但,是此会执行循环。
格式:
while (条件)
{
要执行的代码;
}
举例:
<?php
$a = 0;
while($a <= 10){
echo "第".$a."次循环的数字是:".$a."<br>";
$a++;
}
?>
代码运行了十一次。首先给变量 $a 的值设置为了0,接下来就是while循环部分,它设定的条件为 $a <= 10 ,就是变量这个数字 小于或等于10 的时候停止循环,既然一开始设定的变量为0小于10,那就就执行下面代码。$a++ 的意思是,对变量 $a 进行自加1 ,拓展开来就是 $a=$a+1 。这样的话,变量一开始为0,进入一次后加了1后就变为1,然后继续进行第二次判断,还是小于10,那就就继续执行下面代码,直到变量 $a 自加到10的时候与条件相等,此时就会终止循环。
2、do…while循环
do…while 语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环
do
{
要执行的代码;
}
while (条件);
<?php
$i=1;
do{
$i++;
echo "The number is " . $i . "<br>";
}while ($i<=5);
?>
-->
The number is 2
The number is 3
The number is 4
The number is 5
The number is 6
下面的实例首先设置变量 i 的值为 1 ($i=1;),然后,开始 do…while 循环。循环将变量 i 的值递增 1,然后输出。先检查条件(i 小于或者等于 5),i 小于或者等于 5,循环将继续运行。
3、for循环
指定执行条件,然后反复执行区域代码。
for (初始值; 条件; 增量)
{
要执行的代码;
}
例如:
<?php
for ($i=1; $i<=5; $i++)
{
echo "数字为 " . $i . PHP_EOL;
}
?>
--->
数字为 1
数字为 2
数字为 3
数字为 4
数字为 5
定义一个初始值为 i=1 的循环。只要变量 i 小于或者等于 5,循环将继续运行。循环每运行一次,变量 i 就会递增 1
4、foreach循环
foreach循环只用于循环数组,可遍历每个数组中的键值对。
foreach ($array as $value)
{
要执行代码;
}
每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。
foreach ($array as $key => $value)
{
要执行代码;
}
例如:
<?php
$num=array("0","1","2");
foreach ($num as $value){
echo $value . "<br>";
}
?>
--->
0
1
2
5、数组
数组是数据类型中的复合类型。它能够在一个变量中存储一个或多个值,并且能通过索引号访问对应的值。注:数组索引号是从零(0)开始,零(0)就是第一位。
5.1 三种数组类型:
索引数组 - 带有数字索引的数组
关联数组 - 带有指定键的数组
多维数组 - 包含一个或多个数组的数组
5.2 声明数组关键字 – array()
索引数组:
$a = array("1","2","3");
注:索引数组索引号是从零(0)开始,零(0)就是第一位。
关联数组:
$num = array("one"=>"1","two"=>"2","three"=>"3")
在很多过滤一些sql注入语句、xss等都会将要过滤的语句写进数组中,便于管理。毕竟这么多过滤语句总不能都一个个声明变量。
七、函数
函数,在每个程序语言中都及其重要,它将不同功能代码打包成不同的代码块,极大减少了代码的冗杂。就像数学公式一样拿来套用,代数即可算出想要的结果。函数亦是如此,不同函数你可以定义不同功能,用到哪个功能就选择哪个函数,极大的提高了代码的复用性。
关键字:function
function 函数名(参数1,参数2,...参数n){
函数体,具体代码
[return 参数];
}
<?php
function add($x,$y){
$total=$x+$y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>
-->
1 + 16 = 17
-
add(1,16):函数的利用方式。
-
$x,$y:两个形式参数,可以理解为一个记号。在利用函数时,要传入两个参数才能计算,$x和$y分别对应着1和16(这两个是实际数值,它是实际参数),然后进入函数体中,对这两个数字进行计算。
-
return $total;:将计算的结果值返回,并结束函数的运行。
-
形式参数 :如果函数需要传入参数,需要用到形式参数,也可以理解为记号、标志。
-
实际参数 :在向函数传入实际参数时,所传入的参数值是实际参数。
-
函数也可以没有参数,也可以不返回值。
-
在函数之后,还有一个比较抽象的概念 – 面向对象。
八、字符串操作
字符串是一串连续的字符,在PHP中用单引号或者双引号将其引起来。
当然,还可以对字符串进行很多操作,处理。
例如,PHP使用特定预定义的数组来接收WEB发来的HTTP协议数据,这些发来的数据,基本都是字符串,对于这些字符串我们要进行响应处理,比如说POST方式发来的数据,如果要想防止SQL注入,我们可以对字符串进行一些相关操作,防止SQL注入。
PHP字符串处理函数:
addcslashes — 为字符串里面的部分字符添加反斜线转义字符
addslashes — 用指定的方式对字符串里面的字符进行转义
bin2hex — 将二进制数据转换成十六进制表示
chop — rtrim() 的别名函数
chr — 返回一个字符的ASCII码
chunk_split — 按一定的字符长度将字符串分割成小块
convert_cyr_string — 将斯拉夫语字符转换为别的字符
convert_uudecode — 解密一个字符串
convert_uuencode — 加密一个字符串
count_chars — 返回一个字符串里面的字符使用信息
crc32 — 计算一个字符串的crc32多项式
crypt — 单向散列加密函数
echo — 用以显示一些内容
explode — 将一个字符串用分割符转变为一数组形式
fprintf — 按照要求对数据进行返回,并直接写入文档流
get_html_translation_table — 返回可以转换的HTML实体
hebrev — 将Hebrew编码的字符串转换为可视的文本
hebrevc — 将Hebrew编码的字符串转换为可视的文本
html_entity_decode — htmlentities ()函数的反函数,将HTML实体转换为字符
htmlentities — 将字符串中一些字符转换为HTML实体
htmlspecialchars_decode —htmlspecialchars()函数的反函数,将HTML实体转换为字
符
htmlspecialchars — 将字符串中一些字符转换为HTML实体
implode — 将数组用特定的分割符转变为字符串
join — 将数组转变为字符串,implode()函数的别名
levenshtein — 计算两个词的差别大小
localeconv — 获取数字相关的格式定义
ltrim — 去除字符串左侧的空白或者指定的字符
md5_file — 将一个文件进行MD5算法加密
md5 — 将一个字符串进行MD5算法加密
metaphone — 判断一个字符串的发音规则
money_format — 按照参数对数字进行格式化的输出
nl_langinfo — 查询语言和本地信息
nl2br — 将字符串中的换行符“\n”替换成“<br/>”
number_format — 按照参数对数字进行格式化的输出
ord — 将一个ASCII码转换为一个字符
parse_str — 把一定格式的字符串转变为变量和值
print — 用以输出一个单独的值
printf — 按照要求对数据进行显示
quoted_printable_decode — 将一个字符串加密为一个8位的二进制字符串
quotemeta — 对若干个特定字符进行转义
rtrim — 去除字符串右侧的空白或者指定的字符
setlocale — 设置关于数字,日期等等的本地格式
sha1_file — 将一个文件进行SHA1算法加密
sha1 — 将一个字符串进行SHA1算法加密
similar_text — 比较两个字符串,返回系统认为的相似字符个数
soundex — 判断一个字符串的发音规则
sprintf — 按照要求对数据进行返回,但是不输出
sscanf — 可以对字符串进行格式化
str_ireplace — 像str_replace()函数一样匹配和替换字符串,但是不区分大小写
str_pad — 对字符串进行两侧的补白
str_repeat — 对字符串进行重复组合
str_replace — 匹配和替换字符串
str_rot13 — 将字符串进行ROT13加密处理
str_shuffle — 对一个字符串里面的字符进行随机排序
str_split — 将一个字符串按照字符间距分割为一个数组
str_word_count — 获取字符串里面的英文单词信息
strcasecmp — 对字符串进行大小比较,不区分大小写
strchr — 通过比较返回一个字符串的部分strstr()函数的别名
strcmp — 对字符串进行大小比较