入坑PHP(一)

本文最后更新于:2021年10月3日 晚上

🌈入坑PHP(一)

💠PHP基础

PHP基本语法

标准风格

1
2
3
4
5
<?php
// 这里写PHP代码!
代码一;
代码二; // 每一句的结尾记得加分号
?>

⭕注意:如果一个文件里面全部都是PHP代码,推荐省略结束语句?>

PHP的注释

  • 单行注释
1
2
// 注释内容
# 注释内容
  • 多行注释
1
2
3
/*
注释内容
*/

PHP的变量

PHP的变量不用声明就能够直接定义与使用

1
2
3
4
5
6
<?php
$txt="php 在这里"; // 如果是文本信息就使用双引号
$a=5; // 其他的数字类型的直接声明就好了
$b=10.5;
$c=$a+$b;
?>

⭕变量声明与创建的注意事项

  • 变量必须以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始,不能是数字
  • 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)

值传递

1
2
3
4
5
<?php
$num1=10;
$num2=$num1;
$num2=20;
echo $num1;

地址传递使用

&表示获取变量的地址

1
2
3
4
5
<?php
$num1=10;
$num2=&$num1;
$num2=20;
echo $num1;

销毁变量

只销毁变量名不销毁变量值,变量值由PHP垃圾回收机制销毁(没有变量引用的值就是)

1
unset(变量名)

PHP函数的写法

1
2
3
4
5
6
7
8
9
<?php

function ([可声明变量,这个可以为空])
{
// 函数的内容
}
[函数名]([可声明的变量值,这个可以为空]);

?>

PHP的输出函数

echo函数和print函数,它们是作用基本上相同,用法也都差不多,只能输出数值跟字符串

echo函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
echo "<h2>我这里可以放HTML句子</h2>";
echo "By ERHE.GROUP<br>";
echo "HTML中的转义符正常用<br>";
echo "我是", "一句", "话", ",", "但是", "被分开了。";

$a1=520;
$txt1="erhe.group";

echo "我喜欢的数字是 $a1";
echo "<br>";
echo "我的网页是:$txt1";
echo "<br>";
echo ("要不要一起开发: $txt1"); // 加括号与不加是一个效果的
?>

print函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
print "<h2>我这里可以放HTML句子</h2>";
print "By ERHE.GROUP<br>";
print "HTML中的转义符正常用<br>";
// print "我是", "一句", "话", ",", "但是", "被分开了。";(错误写法)
// print 不能输出多个文本的组合
$a1=520;
$txt1="erhe.group";

print "我喜欢的数字是 $a1";
print "<br>";
print "我的网页是:$txt1";
print "<br>";
print ("要不要一起开发: $txt1"); // 加括号与不加是一个效果的
?>

⭕注意:print 不能输出多个文本的组合,echo可以

print:输出成功后成功返回1

print_r():输出数组

var_dump():输出数据的详细信息,并且带有数据类型和长度

PHP EOF定义字符串

PHP EOF的基本格式

1
2
3
4
5
6
7
<?php
echo <<<EOF
<h1>标题</h1>
<p>段落</p>
EOF;
// ↑结束需要独立一行且前后不能空格,记得带上;要不编译不会通过
?>
  • 必须后接分号,否则编译通不过。
  • EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
  • 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
  • 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
  • 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与a和aa的用法。

❇️PHP常量

PHP定义常量

常量就是在整个运行过程中,固定不变的值,常量不带$,推荐一般情况下常量名为大写
定义方法

1
define('变量名''值',[变量名大小写区分可指定truefalse(默认)])

正常情况下不能用特殊字符做变量名,但是可使用constant来获取特殊字符定义的值

1
2
3
<?php
define('*.*','erhe');
echo '这个网站是',constant('*.*');

也可以使用const来定义常量

1
2
3
<?php
const WEB='Erhe Web';
echo WEB;

常量一旦被定义,不能再被重新定义
判断常量是否定义,通过defined()判断常量是否已经定义

1
2
3
4
5
6
<?php
define('WEB','erhe');
if(!defined('WEB')){
define('WEB','erhe by wss');
}
echo WEB;

PHP预定义常量

1
2
3
4
5
PHP_EOL    // 换行符
PHP_VERSION; // PHP版本
PHP_OS; // PHP运行的系统环境
PHP_INT_MAX; // PHP中整型的最大值
// · · · · · ·还在持续更新中

PHP预定义魔术常量

魔术常量的值,随着它们在代码中的位置改变而改变

1
2
3
__LINE__;	// 获取当前行号
__FILE__; // 文件的完整目录和文件名
__DIR__; // 文件所在的目录

🔣PHP的数据类型

数据类型有两种:强类型和弱类型

PHP是弱类型数据,但是在PHP7.0以后就支持强类型数据

基本类型(标量类型)

整型

  • 整数必须至少有一个数字 (0-9)
  • 整数不能包含逗号或空格
  • 整数是没有小数点的
  • 整数可以是正数或负数
  • 整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)
  • 最大的整数不超过(32位为例):-2的31次方到2的31次方-1,如果超过了这个范围就自动转变成浮点数
1
2
3
4
5
6
7
8
9
10
11
12
<?php 
$x = 5201314;
var_dump($x);
echo "<br>";
$x = -119; // 负数
var_dump($x);
$a1 = 10; // 十进制
$a2 = 010; // 八进制
$a3 = 0x10; // 十六进制
echo $a1,'<br>';
echo $a2,'<br>';
echo $a3,'<br>';

PS:var_dump函数返回变量的数据类型和值

进制转换
进制 缩写 单词
十进制 dec decimalist
二进制 bin binary
八进制 oct octonary
十六进制 hex hexdecimalist

PHP进制转换机制

1
2
3
4
5
6
<?php
echo decbin(123),'<br>'; // 十进制转二进制
echo bindec(1111011),'<br>'; // 二进制转十进制
echo dechex(123),'<br>'; // 十进制转十六进制
echo hexdec('7b'),'<br>'; // 十六进制转十进制
echo decoct(123); // 十进制转八进制

浮点型

  • 浮点数是带小数部分的数字,或是指数形式
  • 浮点数在内存中保存的是近似值,不能直接参与数据大小的比较
1
2
3
<?php 
$x = 3.14;
var_dump($x);

若要比较浮点数,必须要确定比较的位数

1
2
<?php
var_dump(bccomp(3.14,3.141,[这里指定比较的小数点后面的位数]));

结果的判定:如果两个数相等返回0,左边的数left_operand比较右边的数right_operand大返回1,否则返回-1

布尔型

布尔型只有TRUE和FALSE,它的结果不能使用echoprint进行输出,要用var_dump()来进行输出。

字符串

可以将任何文本放在单引号和双引号中

1
2
3
4
5
6
7
8
<?php 
$a = "Welcome ERHE!";
echo $a;
echo "<br>";
$c = 'blog';
echo $c;
var_dump($c);
?>
单双引号的区别

单引号是真正的字符串,双引号要解析字符串当中的变量

1
2
3
4
<?php
$Web='erhe';
echo '我的网站是$Web','<br>';
echo "我的网站是$Web",'<br>';

⭕注意:变量名跟其他字符串用{}分开,{}表示获取变量的值

1
2
3
4
5
<?php
$Web='erhe';
echo "{$Web}是我的网站",'<br>';
echo "${Web}是我的网站",'<br>';
echo "$Web是我的网站",'<br>'; // 错误的写法
转义字符
1
2
3
<?php
echo '我说:\'大家好!\'','<br>';
echo '文件保存在c:\\';
字符串定界符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$test1='定界符,heredoc形式,类似于(双引号)';
echo <<<suibian
$test1 <br>
<strong>这个网站是</strong><br>
<em>Erhe的</em><br>
<u>一个博客网站</u><br>
<hr>
suibian;

$test2='定界符,nowdoc形式,类似于(单引号)';
echo <<<'suibian'
$test2 <br>
<strong>这个网站是</strong><br>
<em>Erhe的</em><br>
<u>一个博客网站</u><br>
<hr>
suibian;
?>

<<<后面跟上标识符,要首位呼应,标识符命名规则跟变量的命名规则一样,最后结尾的时候要顶格写。

数组

数组也是变量,一个变量可以保存多个同类型的数据,只是在内存中这个变量具有连续的空间

索引数组

用整数做下标,默认从0开始(可指定),后面依次加一

1
2
3
4
5
6
7
8
9
10
11
<?php 
print '索引数组<br>';
$cars=array("Welcome","By","Erhe","Blog");
// 下标 0 1 2 3
print_r($cars); // 输出数组
echo '<br><hr>';
var_dump($cars); // 带是上数据长度输出数组
echo '<br><hr>';
echo $cars[0],'<br>'; // 输出数组上面的数据
echo $cars[2],'<br>'; // 输出数组上面的数据
?>

关联数组

用字符串做下标,通过=>符号将下标和值关联起来

1
2
3
4
5
6
7
8
9
<?php 
print '关联数组<br>';
$empc=array('name'=>'Welcome','sex'=>'Erhe','orc'=>'Blog');
echo $empc['name'],'<br>';
echo $empc['sex'],'<br>';
print_r($empc);
echo '<br><hr>';
var_dump($empc);
?>

数组的下标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
print '被指定的索引数组<br>';
$shutd=array(1=>"Welcome","By","Erhe","Blog");
print_r($shutd);
echo '<br><hr>';
$shutdo=array("Welcome",3=>"By","Erhe",10=>"Blog",'group');
print_r($shutdo);
echo '<br><hr>';
$shutdow=array("Welcome",5=>"By",'name'=>"Erhe","Blog");
print_r($shutdow);
echo '<br><hr>';
$shutdown=array(1=>"Welcome",1=>"By",1=>"Erhe","Blog");
print_r($shutdown);
?>

数组的下标只能是正整数和字符串

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
<?php 
$a1[true]='aa'; // 转成1
print_r($a1);
echo '<br><hr>';
$b1[false]='bb'; // 转成0
print_r($b1);
echo '<br><hr>';
$c1[12.9]='cc'; // 转成12(取整数部分)
print_r($c1);
echo '<br><hr>';
$d1[-10]='dd'; // 负数可以做下标
print_r($d1);
echo '<br><hr>';
$e1[-12.3]='ee'; // 取负整数
print_r($e1);
echo '<br><hr>';
$f1['10']='ff'; // 字符串数字转成数字
print_r($f1);
echo '<br><hr>';
$g1[]='gg'; // 空字符串也可以做下标
print_r($g1);
echo '<br><hr>';
$h1[null]='hh'; // 转成空字符串做下标
print_r($h1);
?>

短数组语法

可以直接使用中括号来声明属组

1
2
3
4
5
<?php 
print '索引数组<br>';
$cars=array("Welcome","By","Erhe","Blog");
print_r($cars);
?>

数组的赋值

⭕注意:这个是适用于PHP7.1以上的版本

1
2
3
4
5
6
<?php 
$num1=10;
$num2=20;
[$num1,$num2]=[$num2,$num1];
echo $num1,'<br><hr>',$num2;
?>

二维数组的声明

1
2
3
4
5
6
7
8
9
10
<?php 
$erhetwo=[
["Welcome","By","Erhe","Blog"],
['name'=>'Welcome','sex'=>'Erhe','orc'=>'Blog']
];
print_r($erhetwo);
echo '<br><hr>';
echo'<pre>'; // 原样显示
print_r($erhetwo);
?>

字符串与数组

⭕注意:这个是适用于PHP7.1以上的版本

1
2
3
4
<?php 
echo 'erheblog'[0],'<br>';
echo 'erheblog'[-1],'<br>'; // 从右边开始取第一个
?>

数据类型转换

自动类型的转换

当提供的类型和需要的类型不一致的时候会自动进行类型转换

1
2
3
4
5
6
7
8
9
10
<?php 
$num=10;
if($num){ // 自动将数字转成布尔型
echo 'aa';
}else{
echo 'bb';
}
echo '<br><hr>';
echo '20'-10; // 自动的将字符串转成数字
?>

强制类型转换

语法:(数据类型)数据

1
2
3
4
<?php 
$num=12;
var_dump($num,(int)$num,(float)$num);
?>

其他类型与布尔之间的转换

规则:0、空为假,非0、非空为真

  • 数字转换规律:0为false,非0为true
  • 字符串数组转换规则:0和空是false,其他是true
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
<?php 
var_dump((bool)'abc'); // bool(true)
echo '<br><hr>';
var_dump((bool)''); // bool(false)
echo '<br><hr>';
var_dump((bool)'0'); // bool(false)
echo '<br><hr>';
var_dump((bool)'0.0'); // bool(true)
echo '<br><hr>';
var_dump((bool)'00'); // bool(true)
echo '<br><hr>';
var_dump((bool)'false'); // bool(true)
echo '<br><hr>';
var_dump((bool)'null'); // bool(true)
echo '<br><hr>';
var_dump((bool)1); // bool(true)
echo '<br><hr>';
var_dump((bool)0); // bool(false)
echo '<br><hr>';
var_dump((bool)-10); // bool(true)
echo '<br><hr>';
var_dump((bool)0.0); // bool(false)
echo '<br><hr>';
var_dump((bool)array()); // bool(false)
echo '<br><hr>';
var_dump((bool)array(1)); // bool(true)
echo '<br><hr>';
var_dump((bool)array(false)); // bool(true)
echo '<br><hr>';
var_dump((bool)null); // bool(false)
echo '<br><hr>';
?>

#️⃣PHP的运算符

算术运算符

一元运算符 二元运算符
++ +
-
*
% (取余)

⭕注意:在PHP中。算术运算符只能做数学运算。

1
2
3
4
5
<?php 
echo '10'+'20','<br><hr>'; // 自动进行数据转换
echo '10ab'+'20cd','<br><hr>'; // 省略字符
echo 'ab10'+'cd20','<br><hr>'; // 读取字符串的首字符
?>

++后置:先运算再自增

1
2
3
4
<?php 
$suma=10;
echo $suma++; // 10
?>

++前置:先自增再运算

1
2
3
4
<?php 
$suma=10;
echo ++$suma; // 11
?>

关系(比较)运算符

1
2
3
4
5
6
7
8
9
>
>=
<
<=
== // 等于运算,但是不比较值的类型
!=
=== // 完全等于运算,不仅比较值,而且还比较值的类型,只有两者一致才为真
!==
. // 连接字符串

逻辑运算符

用来连接两个比较运算符

1
2
3
4
5
6
&	// 与:运算符两边的表达式都要计算
| // 或:运算符两边的表达式都要计算
// 短路就是如果前面的条件不满足,后面的条件就不用计算了
&& // 短路与
|| // 短路或
// 非
1
2
3
4
5
6
7
<?php 
$a=5;
if($a>10 && ++$a>20)
echo 'erhe.group';
echo $a;
?>
// 分析:$a>10为false,与中只要有一个是false,另一个不用计算结果肯定是false,所以短路与++a就不计算了,结果是5。
1
2
3
4
5
6
7
<?php 
$a=5;
if($a<10 || ++$a>20)
echo 'erhe.group';
echo $a;
?>
// 分析:短路或只要有一个为true,结果肯定是true,$a<10结果是true,后面++$a就不用计算了,结果是5。

赋值运算符

1
2
3
4
5
6
=
+=
-=
*=
/=
%=

字符串连接符

1
2
3
4
<?php 
echo 'aa'.'bb';
echo 'aa','bb';
?>

错误抑制符

错误抑制符只对表达式有效

1
2
3
4
5
<?php 
echo $erhe+$group;
echo '<br>','<hr>';
echo @($erhe+$group); // 错误抑制符
?>

三元运算符

语法:表达式?值1:值2
表达式的值为true,或者是1返回值1,否则返回值2

1
2
3
4
<?php 
$erhe=10;
echo $erhe%2?'奇数':'偶数';
?>

null合并运算符

⭕注意:这个是适用于PHP7.0以上的版本

1
2
3
4
5
6
<?php 
$data1=321;
echo $data1??'数据未知!';
echo '<br>','<hr>';
echo $data2??'数据未知!';
?>

判断变量是否为设置函数

1
2
isset();	// 判断变量是否被设置,并且设置的不是null
empty(); // 判断一个变量是否为空

PS:变量是否无为空的定义,就是变量的值在转成布尔型的值时候,显示的结果为false的全部为空。

✅PHP的判断

语法

单分支

1
2
3
if(条件){
// 代码块
}

双分支

1
2
3
4
5
if(条件){
// 代码块
}else{
// 代码块
}

多分支

1
2
3
4
5
6
7
if(条件1){
// 代码块
}elseif(条件2){
// 代码块
}else {
// 代码块
}

多路选择

1
2
3
4
5
6
7
8
case 常量:
// 代码块
break;
case 常量:
// 代码块
break;
default:
// 代码块

应用实例

判断是否为闰年(练习单分支)

步骤:

  • 创建表单
  • 提交数据
  • 在服务器获取提交的数据并判断

代码实现

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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>判断是否为闰年</title>
</head>
<body>
<?php
if(!empty($_POST)){ // 判断$_POST是否为空,不为空就提交了数据
$year=$_POST['year']; // 获取年份
echo $year;
if($year==''){
echo '您没有输入年份!';
}else{
if(is_numeric($year)){ // 判断$year是否是数字或字符串数字
$year+=0; // 将字符串数字转成数字型
if(is_int($year)){ // is_int用来检测变量是否是整形
if($year<1){
echo '您输入的年份必须是正整数';
}else{
if($year%4==0 && $year%100!=0 || $year%400==0){
echo "{$year}是闰年";
}else{
echo "{$year}是平年";
}
}
}else{
echo '您输入的不是整数';
}
}else{
echo '您输入的不是数字';
}
}
}
?>
<from method="post" action="">
请输入年份:<input type="text" name="year"> <br />
<input type="submit" name="button" value="判断闰年">
</from>
</body>
</html>

小结:

  • $_POST是一个变量,用来保存post提交的数据
  • action=""表示将数据提交到本页面
  • is_numeric()用来判断变量是否是数字或字符串数字
  • is_int()判断变量是否是整形
  • if else后面如果只有一句代码,大括号可以省略

判断成绩(练习多分支)

目标:输入语文和数学判断等级

代码实现:

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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>判断成绩</title>
</head>
<body>
<?php
if (isset($_POST['button'])){ // 判断$_POST是否为空,不为空就提交了数据
$ch=$_POST['ch']; // 获取语文成绩
$math=$_POST['mach']; // 获取数学成绩
if($ch=='' || !is_numeric($ch) || $ch<0 || $ch>100){
echo '语文成绩必须在0-100之间';
}
elseif($math='' || !is_numeric($math) || !($math>=0 && $math<=100)){
echo '数学成绩必须在0-100之间';
}else {
$avg=($ch+$math)/2;
echo "您的平均分是:{$avg}<br>";
if($avg>=90)
echo 'A';
elseif($avg>80)
echo 'B';
elseif($avg>=70)
echo 'C';
elseif($avg>=60)
echo 'D';
else
echo 'E';
}
}
?>
<from method="post" action="">
语文:<input type="text" name="ch"> <br />
数学:<input type="text" name="math"> <br />
<input type="submit" name="button" value="判断成绩">
</from>
</body>
</html>

更改颜色(练习swich-case)

目标:选择颜色,将文字的颜色改成选择的颜色

代码实现:

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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>更改颜色</title>
</head>
<body>
<?php
if(isset($_POST['button'])){
switch($color=$_POST['color']){
case '1':
$color='#ff0000';
break;
case '2':
$color='#009900';
break;
case '3':
$color='#0000ff';
break;
default:
$color='#000000';
}
echo <<<str
<script type="text/Javascript">
window.onload=function(){
document.getElementById('shi').style.color='$color';
}
</script>
str;
}
?>
<div id="shi">
锄禾日当午,<br />
汗滴禾下土。<br />
谁知盘中餐,<br />
粒粒皆辛苦。<br />
</div>
<from method="post" action="">
<select name="color">
<option value="0">请选择颜色</option>
<option value="1">红色</option>
<option value="2">绿色</option>
<option value="3">蓝色</option>
</select>
<input type="submit" name="button" value="更改颜色">
</from>
</body>
</html>

计算器

目标:实现一个网页计算器

代码实现:

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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>计算器</title>
</head>
<body>
<?php
$num1=''; // $num1的初始值
$num2=''; // $num2的初始值
$op='';
$result='';
if(!empty($_POST)){
$num1=$_POST['num1'];
$num2=$_POST['num2'];
$op=$_POST['op']; // 操作符
switch($op){
case '+':
$result=$num1+$num2;
break;
case '-':
$result=$num1-$num2;
break;
case '*':
$result=$num1*$num2;
break;
case '/':
$result=$num1/$num2;
break;
}
}
?>
<from method="post" action="">
<input type="text" name="num1" value='<?php echo $num1?>'>
<select name="op">
<option value="+" <?php echo $op=='+'?'selected':''?>>+</option>
<option value="-" <?php echo $op=='-'?'selected':''?>>-</option>
<option value="*" <?php echo $op=='*'?'selected':''?>>*</option>
<option value="/" <?php echo $op=='/'?'selected':''?>>/</option>
</select>
<input type="text" name="num2" value='<?php echo $num2?>'>
<input type="submit" name="button" value="=">
<input type="text" name="result" value='<?php echo $result?>'>
</from>
</body>
</html>

♻️PHP循环

基本循环语句

for循环

基本语法

1
2
3
for(初始值;条件;增量){
// 代码块
}

⭕注意:循环中千万不能出现死循环

死循环案例1

1
2
3
4
5
<?php
for($i=1;$i<10;$i--){ // $i永远小于10
echo "{$i}:开始了死循环喂!<br><hr>";
}
?>

死循环案例2

1
2
3
4
5
<?php
for($i=1;$i<10;){ // $i永远等于1,并且小于10
echo "{$i}:开始了死循环喂!<br><hr>";
}
?>

死循环案例3

1
2
3
4
5
<?php
for($i=1;;$i++){ // 只要没有条件就是死循环
echo "{$i}:开始了死循环喂!<br><hr>";
}
?>

死循环案例4

1
2
3
4
5
<?php
for(;;){ // 最经典的死循环
echo "{$i}:开始了死循环喂!<br><hr>";
}
?>

循环理论:

在循环N次的循环体中,初始值执行了1次,条件执行了N+1次,增量执行了N次。在循环执行完毕后,变量的值($i)是存在的。

while循环

基本语法

1
2
3
while(条件){
// 代码块
}

do-while循环

基本语法

1
2
3
do{
// 代码块
}while(条件)

PS:

  • for、while、do-while可相互替换
  • 如果明确知道循环多少次首选for
  • 如果要循环到条件不成立为止选while或者是do-while
  • 先判断再执行选while,先执行再判断选do-while
  • while循条件不成立就不执行,do-while循环条件不成立至少执行一次

foreach循环

foreach循环是用来遍历数组,相似于for-in循环。

基本语法一

1
2
3
foreach(数组 as 值){
// 代码块
}

基本语法二

1
2
3
foreach(数组 as 键=>值){
// 代码块
}

switch循环

基本语法

1
2
3
4
5
6
7
8
9
10
11
switch(变量){
// 验证条件
case [条件]:
// 条件执行体
break;
case [条件]:
// 条件执行体
break;
default:
// 条件执行体
}

PS:虽然只执行一次,但它也属于一种循环

基本循环实战

实现功能:实现从1加到100

for循环

1
2
3
4
5
6
7
<?php
$sum=0;
for($i=1;$i<=100;$i++){
$sum+=$i;
}
echo $sum;
?>

while循环

方法一

1
2
3
4
5
6
7
8
9
<?php
$i=1;
$sum=0;
while($i<=100){
$sum+=$i;
$i++;
}
echo $sum;
?>

方法二

1
2
3
4
5
6
7
8
<?php
$i=1;
$sum=0;
while($i<=100){
$sum+=$i++;
}
echo $sum;
?>

do-while循环

方法一

1
2
3
4
5
6
7
8
9
<?php
$i=1;
$sum=0;
do{
$sum+=$i;
$i++;
}while($i<=100);
echo $sum;
?>

方法二

1
2
3
4
5
6
7
8
<?php
$i=1;
$sum=0;
do{
$sum+=$i++;
}while($i<=100);
echo $sum;
?>

方法三

1
2
3
4
5
6
7
8
<?php
$i=1;
$sum=0;
do{
$sum+=$i;
}while(++$i<=100);
echo $sum;
?>

PS:结合++前置和++后置考虑逻辑

foreach循环

方式一

1
2
3
4
5
6
<?php
$stu=["Welcome","By","Erhe","Blog"];
foreach($stu as $v){
echo $v,"<br><hr>";
}
?>

方式二

1
2
3
4
5
6
<?php
$stu=["Welcome","By","Erhe","Blog"];
foreach($stu as $k=>$v){
echo "{$k}:{$v}","<br><hr>";
}
?>

多语句表达式

目的:初始值、增量可以由多条语句组成

实现功能:数字分解

1
2
3
4
5
<?php
for($i=1,$j=9;$i<=$j;$i++,$j--){
echo "10可以分成{$i}{$j}<br>";
}
?>

PS:初始值、增量可以写多个表达式,但是条件一般只写一个,如果条件写多个,只是最后一个条件起作用

双重循环

实现功能:打印阶梯数字

1
2
3
4
5
6
7
8
<?php
for($i=1;$i<=9;$i++){ // 循环行
for($j=1;$j<=$i;$j++){ // 循环列
echo $j,'&nbsp;';
}
echo '<br>';
}
?>

实现功能:打印九九乘法表

1
2
3
4
5
6
7
8
<?php
for($i=1;$i<=9;$i++){
for($j=1;$j<=$i;$j++){
echo $i,'*',$j,'=',$i*$j,'&nbsp;';
}
echo '<br>';
}
?>

变好看后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<style type="text/css">
table{
width:980px;
}
table,td{
border:solid 1px #0000FF;
border-collapse:collapse;
}
td{
height:40px;
}
</style>

<table>
<?php
for($i=1;$i<=9;$i++){
echo '<tr>';
for($j=1;$j<=$i;$j++){
echo "<td>{$i}*{$j}=",($i*$j),'</td>';
}
echo '</tr>';
}
?>
</table>

🦿PHP跳转语句

break

中断循环

1
2
3
4
5
6
7
<?php
for($i=1;$i<10;$i++){
echo "{$i}:Welcome","Erhe","Blog!<br><hr>";
if($i==5)
break;
}
?> // 输出5句
1
2
3
4
5
6
7
<?php
for($i=1;$i<10;$i++){
if($i==5)
break;
echo "{$i}:Welcome","Erhe","Blog!<br><hr>";
}
?> // 输出4句

中断多重循环

1
2
3
4
5
6
7
8
9
10
11
<?php
for($i=1;$i<=9;$i++){
for($j=1;$j<=$i;$j++){
echo $j,'&nbsp;';
if($j==5){
break 2; // 跳出几个循环就写及
}
}
echo '<br>';
}
?>

continue

中断当前循环,进入下一个循环

1
2
3
4
5
6
7
<?php
for($i=1;$i<10;$i++){
if($i==5)
continue;
echo "{$i}:Welcome","Erhe","Blog!<br><hr>";
}
?> // 没有第5句的结果输出

PS:break和continue默认中断、跳出1重循环,如果调中断、跳出多重循环,在后面加一个数字。

🎭PHP代替语法

PHP中,除了do-while以外,其他的语法结构都有替代语法
规则:左大括号变冒号,又大括号变endxxx

基本代替语法

if的代替语法

1
2
3
4
5
if():
elseif():
else:
// 代码块
endif;

switch的代替语法

1
2
3
switch():
// 代码块
endswitch;

for的代替语法

1
2
3
for():
// 代码块
endfor;

while的代替语法

1
2
3
while():
// 代码块
endwhile;

foreach的代替语法

1
2
3
foreach():
// 代码块
endforeach;

应用实例

应用到混编上面

未使用代替语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>混编</title>
</head>
<body>
<?php
for($i=1;$i<=10;$i++){
if($i%2==0){
?>
<?php echo $i?>:WelcomeErheBlog!<br><hr>
<?php
}
}
?>
</body>
</html>

使用代替语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>混编</title>
</head>
<body>
<?php
for($i=1;$i<=10;$i++):
if($i%2==0):
?>
<?php echo $i?>:WelcomeErheBlog!<br><hr>
<?php
endif;
endfor;
?>
</body>
</html>

📥PHP函数

函数就是一段代码块
函数可以实现模块化编程

函数的定义

定义函数的基本语法

1
2
3
function 函数名(参数1,参数2,.....){
// 函数体
}

函数的调用

1
函数名();

PS:函数名不区分大小写。

可变函数

将函数名存储到变量中

1
2
3
4
5
6
7
<?php
function erhe($path){
echo $path,'<br>';
}
$nvme='erhe';
$nvme('welcome');
?>

匿名函数

1
2
3
4
5
6
<?php
$erhe=function(){ // 定义匿名函数
echo 'welcome erhe.group';
};
$erhe(); // 调用函数
?>

参数传递

函数的参数有形式参数和实际参数
形式参数是定义函数时候的参数,只起形式的作用,没有具体的值
实际参数的调用函数时候的参数,有具体的值

1
2
3
4
5
6
<?php
function erhe($num1,$num2){
echo $num1+$num2;
}
erhe(12,23);
?>

默认情况下,参数的传递是值传递

1
2
3
4
5
6
7
8
<?php
$num=10;
function erhe($augrp){
$augrp=50;
}
erhe($num);
echo $num;
?>

地址传递,加上$

1
2
3
4
5
6
7
8
<?php
$num=10;
function erhe(&$augrp){
$augrp=50;
}
erhe($num);
echo $num;
?>

PS:如果是地址传递,不能直接写值

参数的默认值

在函数定义的时候给形参赋值就是参数的默认值。(默认值必须是值,不能用变量代替)

1
2
3
4
5
6
7
8
<?php
function erhe($name,$port='地址不详'){
echo '姓名:'.$name,'<br>';
echo '地址:'.$port,'<hr>';
}
erhe('阿里云','北京');
erhe('华为云');
?>

默认值可以使用常量

1
2
3
4
5
6
7
8
9
<?php
define('ACE','地址不详'); // 设置常量
function erhe($name,$port=ACE){ // 注意形参的顺序
echo '姓名:'.$name,'<br>';
echo '地址:'.$port,'<hr>';
}
erhe('阿里云','河南');
erhe('华为云');
?>

PS:没有默认值的形参写前面,有默认值的形参写后面。

参数个数不匹配盘

1
2
3
4
5
6
7
8
<?php
function erhe($num1,$num2){
echo $num1,'<br>';
echo $num2,'<hr>';
}
// erhe(10); // 实参少于形参(报错)
erhe(10,20,30); // 实参多于形参,只取前面对应的值
?>

获取所传递的参数

1
2
3
4
5
6
7
8
9
10
11
<?php
function erhe(){
// echo func_num_args(),'<br>'; // 获取参数的个数
$num=func_get_args(); // 获取参数的数组
print_r($num);
echo '<br>';
}
erhe(10);
erhe(10,20);
erhe(10,20,30);
?>

参数约束

定义变长参数

...相当于func_get_args()上面的函数

1
2
3
4
5
6
7
8
9
10
<?php
function erhe($name,$age,...$aihao){
echo '姓名:'.$name,'<br>';
echo '年龄:'.$age,'<br>';
print_r($aihao);
echo '<hr>';
}
erhe('tom',21);
erhe('李华',25,'吃饭','睡觉');
?>

⭕注意:如果数组调用此函数要将数组里面的参数展开

1
2
3
4
5
6
7
8
9
<?php
function erhe(...$args){
print_r($args);
echo '<br>';
}
$numg=[10,20,30];
echo '<pre>';
erhe(...$numg); // 将数组中的参数展开
?>

参数类型约束

⭕注意:这个是适用于PHP7.0以上的版本

1
2
3
4
5
6
7
8
<?php
function erhe(string $name,int $age){ // 指定数据类型,变成强类型数据
echo "姓名:{$name}<br>";
echo "年龄:{$age}<br>";
}
// erhe('tome','aug'); // 已经报错了
erhe('tome',32);
?>

返回值类型约束

1
2
3
4
5
6
7
<?php
function erhe(int $num):int{ // 指定返回值的数据类型
// return "aaa"; // 不是指定的返回值数据就报错
return $num;
}
erhe(32);
?>

PS:可约束的数据类型有这些:string、int、float、bool、数组

约束返回类型是数组

1
2
function erhe():array{ 
}

约束return后面不能有返回值

⭕注意:这个是适用于PHP7.1以上的版本

1
2
3
4
function erhe():void {	// void是空的意思
return;
}
erhe();

⛔return

终止脚本执行

1
2
3
4
5
<?php
echo '锄禾日当午<br>';
return;
echo '汗滴禾下土';
?>

⭕注意:return只能中断当前php文件,如果有包含文件,就只能中断有return的那个php文件。

如果想全部终止使用

1
2
3
exit();
// 或者
die();

返回页面结果

index.php(主页文件)

1
2
3
4
<?php
$stu=require './test.php';
print_r($stu);
?>

test.php(包含文件)

1
2
3
<?php
return array('name'=>'tom','sex'=>'男');
?>

PS:在项目中引入配置文件就使用这种方法

函数的返回和终止

函数的终止

1
2
3
4
5
6
7
8
<?php
function erhe(){
echo 'aaa';
return;
echo 'bbb';
}
erhe();
?>

函数的返回

1
2
3
4
5
6
<?php
function erhe(){
return 10;
}
echo erhe();
?>

🪄练习测试

通过for循环将数组中值求和、求平均值

代码实现

1
2
3
4
5
6
7
8
9
10
11
<?php
$num=[1,24,534,65,2,54,657,2,64,35,54,767,86,344];
$he=0;
// for($i=0;$i<count($num);$i++){ // 代码可优化,看如下
for($i=0,$n=count($num);$i<$n;$i++){
$he+=$num[$i];
}
echo '和是:'.$he,'<br>';
echo '平均值:'.$he/count($num),'<br>';
echo '平均值,精确到小数点后两位:'.number_format($he/count($num),2);
?>

数组翻转

1
2
3
4
5
6
7
<?php
$stu=["Welcome","By","Erhe","Blog"];
for($i=0,$j=count($stu)-1;$i<$j;$i++,$j--){
[$stu[$i],$stu[$j]]=[$stu[$j],$stu[$i]]; // 元素交换
}
print_r($stu);
?>

遍历二维数组

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$stu=[
[1,3,5,2,3,4,5],
[12,32,435,3,2321,121,2,32,12]
];
for($i=0;$i<count($stu);$i++){ // 循环第一列
for($j=0;$j<count($stu[$i]);$j++){ // 循环第二列
echo $stu[$i][$j],'&nbsp';
}
echo '<br>';
}
?>

数据分拣

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
for($i=1;$i<=100;$i++){
if($i%15==0)
echo 'C';
elseif ($i%3==0)
echo 'A';
elseif ($i%5==0)
echo 'B';
else
echo $i;
echo '&nbsp';
}
?>

打印水仙花数

1
2
3
4
5
6
7
8
9
<?php
for($i=100;$i<=999;$i++){
$a=(int)($i/100);
$b=(int)(($i%100)/10);
$c=(int)($i%10);
if($i==pow($a,3)+pow($b,3)+pow($c,3))
echo $i,'<br>';
}
?>

斐波那契数列

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$num1=1; // 第一个数
$num2=1; // 第二个数
echo $num1,'&nbsp;',$num2,'&nbsp;';
while(true){
$num3=$num1+$num2; // 第三个数是前面两个数的和
if($num3>100) // 超过100终止循环
break;
echo $num3,'&nbsp;';
$num1=$num2; // 将$num1转给$num2
$num2=$num3; // 将$num2转给$num3
}
?>

🥅PHP作用域

声明的局部与全局

局部的变量声明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$x=10020; // 全局变量

function myTest()
{
$y=10; // 局部变量
echo "<p>测试函数内变量:<p>";
echo "变量 x 为: $x";
echo "变量 y 为: $y";
}
myTest();

echo "<p>测试函数外变量:<p>";
echo "变量 x 为: $x";
echo "变量 y 为: $y"; // 这个是没有输出的
?>

变量作用域

全局变量:在函数外面
局部变量:在函数里面,默认情况下,函数内部是不会访问函数外部的变量
超全局变量:可以在函数内部和函数外部访问,形式:$_XXXXXX
常量没有作用域的概念,在哪里都适应。

报错写法:函数内部是不会访问函数外部的变量

1
2
3
4
5
6
7
<?php
$num=10;
function erhe(){
echo $num;
}
erhe();
?>

将值赋给全局变量

1
2
3
4
5
6
7
<?php
$_POST['num']=10;
function erhe(){
echo $_POST['num'];
}
erhe();
?>

函数内定义全局变量

1
2
3
4
5
6
7
8
<?php
function erhe(){
$_POST['num']=10;
echo $_POST['num'];
}
erhe();
echo $_POST['num'];
?>

global 关键字

global 关键字用于函数内来读取并会更新数外的全局变量

1
2
3
4
5
6
7
8
9
10
<?php
$x=8;
$y=6;
function erhe(){
global $x,$y; // 将函数外部的变量,引用到函数内部
$y=$x+$y;
}
erhe();
echo $y; // 输出 14
?>

函数内部访问全局变量:使用$GLOBALS[]函数

1
2
3
4
5
6
7
8
9
<?php
$x=8;
$y=6;
function erhe(){
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; // 访问全局变量
}
erhe();
echo $y; // 输出 14
?>

PS:只要你声明了全局变量,它就会自动保存到$GLOBALS[]函数里面。

Static 关键字

1
2
3
4
5
6
7
8
9
10
11
12
<?php
function erhe(){
static $x=0;
echo $x;
$x++;
echo PHP_EOL; // 换行符
}
erhe(); // 调用第一次
erhe(); // 调用第二次
erhe(); // 调用第三次
// PHP常量的每次调用的值都会被存储,下次调用时,用的是上次调用后的结果。
?>

静态变量

静态变量一般指的是静态局部变量

1
2
3
4
5
6
7
8
9
10
11
<?php
function erhe(){
$num=10;
$num++;
echo $num,'<br>';
}
erhe(); // 调用第一次
erhe(); // 调用第二次
erhe(); // 调用第三次
// PHP静态局部变量的每次调用的值都不会被存储,下次调用时,用的是新的变量,上次的值会被销毁。
?>

常量和静态变量的区别
1、常量和静态变量都是初始化一次
2、常量不能改变值,静态变量可以改变值
3、常量没有作用域,静态变量有作用域

匿名函数use()

默认情况下,函数内部不能访问函数外部的变量,但在匿名函数中,可以通过use将外部变量引入匿名函数中

1
2
3
4
5
6
7
<?php
$num=10;
$erhe=function() use($num) {
echo $num;
};
$erhe();
?>

PS:只能引入一层,嵌套使用use()函数则不能引入成功

递归

函数内部自己调用自己

打印10~1

1
2
3
4
5
6
7
8
9
<?php
function erhe($num){
echo $num,'&nbsp';
if($num==1) // 递归出口
return;
erhe($num-1); // 递归点
}
erhe(10);
?>

从1加到100

1
2
3
4
5
6
7
8
<?php
function erhe($num){
if($num==1) // 递归出口
return 1;
return $num+erhe($num-1); // 递归点
}
echo erhe(100);
?>

斐波那契数列

打印第五个斐波那契数

1
2
3
4
5
6
7
8
<?php
function erhe($n){
if($n==1 || $n==2) // 递归出口
return 1;
return erhe($n-1)+erhe($n-2); // 递归点
}
echo erhe(5);
?>

打印前10个斐波那契数列

1
2
3
4
5
6
7
8
9
<?php
function erhe($n){
if($n==1 || $n==2) // 递归出口
return 1;
return erhe($n-1)+erhe($n-2); // 递归点
}
for($i=1;$i<=10;$i++)
echo erhe($i),'&nbsp;';
?>

📣特别声明

此文章全部都是依靠自己的学习理解来写的原创文章,难免可能会出现有错误的地方,

如果大家以后阅读的时候发现有问题,那就麻烦到下方评论区来进行错误指出,使错误尽快做出改正,

在此,感谢大家的阅读与支持!🤝💦🎉

🍻支持一下

觉得我写的好的话可以支持一下我哦~持续关注我,会更新其他好玩且实用的项目。

👋如果我能帮助到你,那就请我喝杯🧋呗~👇👇👇


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!