基础课文档
现在是2023年9月,本系列课程基于php8
学习网站推荐:
PHP 教程 (w3school.com.cn)
PHP 教程 | 菜鸟教程 (runoob.com)
关于php
PHP 是 “PHP Hypertext Preprocessor” 的首字母缩略词
PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。
PHP 是开源免费的,并且使用广泛 , 可供免费下载和使用,可商用
PHP 脚本在服务器上执行
PHP 是解释型语言,按顺序从上往下执行,无需编译,直接运行
它强大到足以成为在网络上最大的博客系统的核心(WordPress)!
它深邃到足以运行最大的社交网络(facebook)!
而它的易用程度足以成为初学者的首选服务器端语言!
什么是 PHP 文件?
- PHP 文件能够包含文本、HTML、CSS 以及 PHP 代码
- PHP 文件的后缀是 “.php”
- PHP 代码在服务器上执行,而结果以纯文本返回浏览器
PHP 能够做什么?
- PHP 能够生成动态页面内容 (Html页面渲染)
- PHP 能够创建、打开、读取、写入、删除以及关闭服务器上的文件 (文件操作)
- PHP 能够接收表单数据 (例如注册登录)
- PHP 能够发送并取回 cookies (记录用户状态等信息)
- PHP 能够添加、删除、修改数据库中的数据 (数据操作)
- PHP 能够限制用户访问网站中的某些页面 (权限管理)
- PHP 能够对数据进行加密和压缩
- PHP 通常用于小程序 app 浏览器插件等的后端服务接口
通过 PHP,您可以不受限于只输出 HTML。您还能够输出图像、PDF 文件、甚至 Flash 影片。您也可以输出任何文本,比如 XHTML 和 XML。
为什么使用 PHP?
- PHP 是跨平台的,可运行于各种平台(Windows, Linux, Unix, Mac OS X 等等)
- PHP 兼容几乎所有服务器(Apache,Nginx, IIS 等等)
- PHP 支持多种数据库 (Mysql)
- PHP 是免费的。请从官方 PHP 资源下载:php语法
基础 PHP 语法
PHP 脚本以
<?php
开头,以?>
结尾:<?php // 此处是 PHP 代码 ?> <?php // 此处是 PHP 代码 ?>
PHP 脚本可放置于文档中的任何位置,文件扩展名是 “.php”。
PHP 文件通常包含 HTML 标签以及一些 PHP 脚本代码,注意: html js css可以写在php文件里运行,但php不能写在html js css文件里运行。PHP 语句以分号结尾(;)
<!DOCTYPE html> <html> <body> <h1>我的第一张 PHP 页面</h1> <?php echo "Hello maoshu!"; ?> </body> </html>
输出方法:echo 和 print
不同点:
- echo - 能够输出一个以上的字符串,英文逗号隔开
- print - 只能输出一个字符串,并始终返回 1
- echo 比 print 稍快,并且开销低
<?php echo "<h2>猫叔123!</h2>"; echo "Hello world!<br>"; echo "Maoshu", " string", 1, " 2 "; ?>
相同点:
- 都是一个语言结构,有无括号均可使用:echo 或 echo() print 或 print()
注释
注释不会被作为程序来读取和执行。它唯一的作用是供代码编辑者阅读(让别人阅读明白,提醒自己做过什么,特别是一些函数方法的用途等)
<?php // 这是单行注释 # 这也是单行注释 /* 这是多行注释块 它横跨了 多行 随意换行没问题 echo '猫叔'; */ ?>
变量
变量是存储信息的容器,有点类似初中数学里的代数
x=1,y=2
$a=5; $_a = 5; $b=6; $c=$a+$b; echo $c;
=号并不是真实的等号,而是叫赋值
变量命名规则
- 变量以 $ 符号开头,其后是变量的名称
- 变量名称必须以字母或下划线开头
- 变量名称不能以数字开头,不能有空格
- 变量名称只能包含字母 数字 字符和 下划线(A-z、0-9 以及 _)
- 变量名称对大小写敏感($y 与 $Y 是两个不同的变量)
注释:PHP 变量名称对大小写敏感!
推荐的几种命名方法:
- 下划线命名法
$first_name = 'zhang';
- 小驼峰命名法
$firstName = 'zhang';
- 大驼峰命名法
$FirstName = 'zhang';
$txt="Hello world!"; $a=5; $b=8.5;
不必告知 PHP 变量的数据类型,php会根据它的值,自动把变量转换为正确的数据类型
变量也有作用域之分,等到后面函数的时候再说。
空白符
echo '猫叔 你在干什么 ? '; /** 我在 看抖音小姐姐 */
大小写敏感
所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感,
但是所有变量都对大小写敏感ECHO "Hello 猫叔!<br>"; echo "Hello 猫叔!<br>"; EcHo "Hello 猫叔!<br>"; PRint "Hello 猫叔!<br>";
$color="red"; echo "My car is " . $color . "<br>"; echo "My house is " . $COLOR . "<br>";
命令行的使用
可以像python一样在命令行里运行php
用cmd或者vscode插件可以获取用户输入的内容
$input = readline("请输入内容:"); echo "您输入的内容是: " . $input;
echo "请输入内容:"; $input = fgets(STDIN); echo "您输入的内容是: " . $input;
数据类型
字符串、整数、浮点数、逻辑(布尔型)、数组、对象、NULL、资源类型
用var_dump() 会返回变量的数据类型和值,一般用于开发调试时使用只获取数据类型
echo gettype($a);
字符串
字符串是字符序列,比如 “Hello world!”。
字符串可以是引号内的任何文本,可以使用单引号或双引号
注意双引号和单引号的区别$x = "Hello world!"; echo $x; echo "<br>"; $x = 'Hello world!'; var_dump($x);
整数
和数学里的整数有些区别
- 整数必须有至少一个数字(0-9)
- 整数不能包含逗号或空格
- 整数不能有小数点
- 整数正负均可
- 可以用三种格式规定整数:十进制、十六进制(前缀是 0x)或八进制(前缀是 0)
$x = 5985; var_dump($x); echo "<br>"; $x = -345; // 负数 var_dump($x); echo "<br>"; $x = 0x8C; // 十六进制数 var_dump($x); echo "<br>"; $x = 047; // 八进制数 var_dump($x);
浮点数
浮点数是有小数点或指数形式的数字
$x = 10.365; var_dump($x); echo "<br>"; $x = 2.4e3; var_dump($x); echo "<br>"; $x = 8E-5; var_dump($x);
逻辑(布尔值)
$x=true; $y=false;
数组
在一个变量中存储多个值
分为一维数组和多维数组,认识即可,不要深究,后面会专门讲$cars=array("Volvo","BMW","SAAB"); $_cars=["Volvo","BMW","SAAB"]; var_dump($cars); var_dump($_cars);
对象
需要用到类和封装的知识
等学到类的时候再讲Null
特殊的 NULL 值表示变量无值。NULL 是数据类型 NULL 唯一可能的值
注意:可以通过设置变量值为 NULL 来清空变量数据$x="Hello world!"; var_dump($x); $x=null; var_dump($x);
resource 资源类型
等学到数据库的时候再讲
初级实战 - 个人博客的开头部分
实战目标:
html简单介绍
复习变量声明和输出
复习注释
了解变量重复赋值EOF(heredoc) 定界符使用说明
以<<<EOF开始标记开始,以EOF结束标记结束
结束标记必须顶头写,独自占一行,不能有缩进和空格
在结束标记末尾要有分号
EOF可以用任意其它字符代替,开始标记和结束标记相同即可,比如常用大写的EOT、EOD、EOF来表示,但是不只限于那几个(也可以用:JSON、HTML等),只要保证开始标记和结束标记不在正文中出现即可。
位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在 heredoc 中,变量不需要用连接符.或,来拼接
当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义。
<?php $name="变量会被解析"; $a=<<<EOF $name<br> 看上面的name已经不是name啦!!!<br> EOF; echo $a; echo '<hr>'; $a=<<<EOF <a>html格式会被解析</a><br/>你看看a标签显示了没? 你看看br显示了没? <br> EOF; echo $a; echo '<hr>'; echo <<<EOF "双引号外所有被排列好的格式都会被保留" "但是双引号内会保留转义符的转义效果,比如table:\t和换行:\n下一行" 你看页面里有\t吗? \n \t 和引号没关系吧? 那单'引'号呢?'\t \n 是否能看到?' EOF;
运算符
注:资料来源于菜鸟教程 www.runoob.com
算术运算符
![[Pasted image 20230922152416.png]]
<?php $x=10; $y=6; echo ($x + $y); // 输出16 echo '<br>'; // 换行 echo ($x - $y); // 输出4 echo '<br>'; // 换行 echo ($x * $y); // 输出60 echo '<br>'; // 换行 echo ($x / $y); // 输出1.6666666666667 echo '<br>'; // 换行 echo ($x % $y); // 输出4 echo '<br>'; // 换行 echo -$x; //整数之间的整除,参数也必须是整数,向下取整 var_dump(intdiv(10, 3)); ?>
赋值运算符
![[Pasted image 20230922155033.png]]
<?php $x=10; echo $x; // 输出10 $y=20; $y += 100; $y = $y + 100; echo $y; // 输出120 $z=50; $z -= 25; echo $z; // 输出25 $i=5; $i *= 6; echo $i; // 输出30 $j=10; $j /= 5; echo $j; // 输出2 $k=15; $k %= 4; echo $k; // 输出3 ?>
递增/递减运算符
![[Pasted image 20230922160114.png]]
<?php $x=10; echo ++$x; // 输出11 $y=10; echo $y++; // 输出10 $z=5; echo --$z; // 输出4 $i=5; echo $i--; // 输出5 ?>
比较运算符
![[Pasted image 20230922160145.png]]
<?php $x=100; $y="100"; var_dump($x == $y); echo "<br>"; var_dump($x === $y); echo "<br>"; var_dump($x != $y); echo "<br>"; var_dump($x !== $y); echo "<br>"; $a=50; $b=90; var_dump($a > $b); echo "<br>"; var_dump($a < $b); ?>
逻辑运算符
![[Pasted image 20230922160442.png]]
and 和 && 的区别, or 和 || 的区别
主要体现在优先级:
- && 运算符的优先级比 and 运算符高。
- 这意味着,在一个表达式中, && 运算符会先被执行,然后才是 and 运算符。
<?php // 在表达式中使用&&运算符 $bool = true && false; // 显示&&运算符的运算结果 echo "&&运算符的结果为:"; if($bool){ echo 'true'; } else{ echo 'false'; } echo '----'; // 在表达式中使用and运算符 $bool = true and false; // 显示and运算符的运算结果 echo "and运算符的结果为:"; if($bool){ echo 'true'; } else{ echo 'false'; } ?>
阻断效果
//or-前面语句值为真,or后面不执行;否则,执行 $result = 0 or var_dump('执行我的语句'); //输出-执行我的语句 var_dump($result); //int 0 $result = 2 or var_dump('执行我的语句'); //不输出 var_dump($result); //int 2
条件语句 (条件分支)
if语句
仅当指定条件成立时执行代码
if (条件) { 条件成立时要执行的代码; }
if…else…语句
在条件成立时执行一块代码,条件不成立时执行另一块代码
if (条件) { 条件成立时执行的代码; } else { 条件不成立时执行的代码; }
if…elseif…else
if (条件) { if条件成立时执行的代码; } elseif (条件) { elseif条件成立时执行的代码; } elseif (条件) { elseif条件成立时执行的代码; } else { 条件不成立时执行的代码; }
switch
注意:break很重要,不要漏掉
<?php switch (n) { case label1: 如果 n=label1,此处代码将执行; break; case label2: 如果 n=label2,此处代码将执行; break; default: 如果 n 既不等于 label1 也不等于 label2,此处代码将执行; } ?>
什么时候适合用switch?
适合条件比较多,并且条件单一固定值匹配时用循环
让相同的代码块一次又一次地重复运行
for 循环
用于预先知道脚本需要运行的次数的情况
for (初始值; 条件; 增量) { 要执行的代码(叫循环体); }
参数:
- 初始值:主要是初始化一个变量值,用于设置一个计数器(但可以是任何在循环的开始被执行一次的代码)。
- 条件:循环执行的限制条件。如果为 TRUE,则循环继续。如果为 FALSE,则循环结束。
- 增量:主要用于递增计数器(但可以是任何在循环的结束被执行的代码)。
注释:上面的初始值和增量参数可为空,或者有多个表达式(用逗号分隔)。
for ($i=1,$j=0; $i<=5; ) { echo "数字为 " . $i.$j . PHP_EOL; $i++; }
while 循环
只要指定的条件成立,则循环执行代码块,直到指定的条件不成立
while (条件) { 要执行的代码; }
注意避免死循环
$i=1; while($i<=5) { echo "The number is " . $i . "<br>"; $i++; }
do…while
语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环
do { 要执行的代码; } while (条件);
$i=1; do { $i++; echo "The number is " . $i . "<br>"; } while ($i<=5);
continue和break
continue
for ($i=0; $i < 5; $i++) { if($i == 3){ continue; } echo $i; }
break
for ($i=0; $i < 5; $i++) { if($i>3){ break; } echo $i; }
break 2
for ($i = 0; $i < 3; $i++) { echo "外层循环: " . $i . "<br>"; for ($j = 0; $j < 5; $j++) { echo "内层循环: " . $j . "<br>"; if ($j == 2) { break 2; // 跳出两层循环 } } } echo '已跳出全部循环';
在while中使用continue break和break2
$a = 10; while ($a <= 20) { $a++; if($a == 15){ //continue; break; } echo $a.'---'; }
$a = 10; while ($a <= 20) { $a++; if($a == 15){ for ($i=0; $i < 5; $i++) { if($i==3){ break 2; } echo '<br>'.$i.'<br>'; } } echo $a.'---'; }
foreach 循环
用于遍历数组,等学数组一起讲
数组
数组能够在单个变量中存储多个值,并且可以根据 键 访问其中的 值
数值数组
$maoshu = array("猫叔1","猫叔2","猫叔3","猫叔4","猫叔5"); $maoshu = ["猫叔1","猫叔2","猫叔3","猫叔4","猫叔5"]; var_dump($maoshu[1]); var_dump($maoshu[5]);
$maoshu2 = []; $maoshu2[3] = '3'; var_dump($maoshu2);
关联数组
关联数组是使用您分配给数组的指定的键的数组
$age=["maoshu"=>"35","dong"=>"37"]; //或者 $age['maoshu']="35"; $age['dong']="37";
获取数组的长度 - count() 函数
echo count($maoshu);
遍历数组
for($i=0;$i<count($maoshu);$i++) { echo $maoshu[$i]; echo "<br>"; } foreach ($maoshu as $value) { 要执行代码; } foreach ($maoshu as $key => $value) { 要执行代码; }
for可以,while也可以,但最常用的是foreach
多维数组
多维数组是包含一个或多个数组的数组
$maoshuArr = [ [ "免费课"=>[ "猫叔课", "php", "python" ], "体验课"=>[ "php", "js", "vue" ] ], [ "收费课"=>[ "油猴脚本", "浏览器插件", "666" ] ] ]; print_r( $maoshuArr );
$maoshuArr = [ "test" => [ "免费课"=>[ "猫叔课", "php", "python", ], "体验课"=>[ "php", "js", "vue", ] ], "product" => [ "免费课"=>[ "产品1", "产品2", ], "体验课"=>[ "产品3", "产品4", ] ] ]; print_r( $maoshuArr );
遍历多维数组
foreach ($maoshu as $key => $value) { 要执行代码; foreach ($value as $kk => $vv) { 要执行代码; } }
初级实战2 - 个人博客的开头部分
实战目标:
- 复习运算符的使用
- 复习条件语句的使用
- 复习循环
- 学会使用数组
任务:
循环数组:输出顶部导航栏,输出博客标题和时间
条件语句:如果为第一个导航,则给出突出显示
运算:输出数字的大小从大到小排列函数
函数是一段可重复使用的代码块,可以将一系列操作封装起来,使代码更加模块化、可维护和可重用,来大大节省我们的开发时间和代码量,提高编程效率。
内置函数
内置函数有很多,之前学的print_r() count() 就是一个内置函数,
获取当前时间 time(),date(‘Y-m-d H:i:s’)这节我们主要讲自定义函数
创建(定义)函数 和 调用
PHP 函数准则:
- 函数的名称应该提示出它的功能
- 函数名称以字母或下划线开头(不能以数字开头)
function functionName() { // 要执行的代码 } //调用 functionName();
function test(){ echo '我的名字是:写代码的猫叔'; } test(); // 获取当前的时间 function nowTime(){ echo date('Y-m-d H:i:s'); } nowTime();
添加参数
为了给函数添加更多的功能,我们可以添加参数,参数类似变量
function myName($name){ echo "我的名字是:$name"; } myName("猫叔");
// 获取当前的时间 function nowTime($type){ if($type=="time"){ echo date('Y-m-d H:i:s'); } else if($type==