PHP基础笔记

基础课文档

现在是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 资源下载:www.php.net
  • PHP 易于学习,并可高效地运行在服务器端

最好应具备的基础知识

在继续学习之前,您需要对下面的知识有基本的了解:

  • HTML
  • CSS
  • JavaScript(入门级这个无所谓)

环境安装和编辑器推荐

编辑器根据自己喜好即可,我推荐vscode /notepad-- /notepad next /phpstorm
环境我推荐使用phpstudy(小皮)
演示创建一个站点

注意:把电脑文件扩展名显示出来

![[Pasted image 20230920100234.png]]

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==