学习PHP

参考B站视频:php中文网PHP8快速入门在线教程

官网文档:https://www.php.net/manual/zh/langref.php

参考博客资料:https://www.ziruchu.com/

导言

1、PHP 是什么

PHP(Hypertext Preprocessor 超文本预处理器) 的简称,是一种被广泛应用的开源通用的服务器端脚本语言,适用于 Web 开发并可嵌入 HTML 中。

  • 通用:指跨平台,如:Windows、Linux、MacOS
  • 开源:意味着你可以轻松获取全部源代码,并进行定制或扩展
  • 免费:意味着你不必为PHP花一分钱,哪怕用在商业项目中
  • 服务器端:意味着你必须将它安装在服务器环境下才可以使用
  • 脚本语言:解释型语言,按编写顺序执行。是指不需要编译,直接由解释器/虚拟机执行的编程语言

2、PHP能做什么

  • 可以快速动态的生成HTML页面
  • 可以返回前端需要的各种类型的数据
  • 可以高效安全的处理表单数据
  • 可以安全的操作服务器上的文件
  • 可以控制与客户端的会话( Cookie/Session ),登录
  • 可以对用户的行为进行授权控制
  • 可以高效安全的操作各种类型的数据库
  • 通过扩展,可以实现加密,压缩等其他功能
  • 可以提供接口数据,包括:小程序、APP、等其他语言

3、PHP 程序执行流程

服务器端必须要有web服务器,Apache或者Nginx!才能接受这些文件!

PHP解释器可以把PHP转为HTML语言!

一、PHP 程序

  • PHP 文件的默认扩展名是 “.php”
  • PHP 文件中可以包含 htmlCSSJavaScript 代码
  • PHP代码组成,由5部分!
序号 组成 描述
1 <?php ... ?> PHP 标记
2 PHP代码 函数、数组、流程控制、类、方法…
3 ;{} 语句结束符,;一行语句,{}一段语句
4 空白符 合理使用空白符可增强代码可读性
5 注释 // 单行注释/* 多行注释 */

1、PHP 标记

  • 开始标记 <?php 和 结束标记 ?> 中间写 PHP 代码

当解析一个文件时,PHP 会寻找起始和结束标记,也就是告诉 PHP 开始和停止解析二者之间的代码。此种解析方式使得 PHP 可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被 PHP 解析器忽略。

<?php 
?>

只有开始没有结束标记,表示所有代码都是由PHP解析器解析成PHP代码来执行!

总之只要把PHP代码,放在开始标记和结束标记内,那么即使是word文档也能放!

2、PHP 代码

序号 指令 描述
1 echo 可以输出一个或多个字符串,用逗号(,)隔开
2 print 只允许输出一个字符串
<?php
echo 111,222
print 111
?>

备:上面代码报错,因为没有结束符

<?php
12334;
454436;
?>
无任何,输出,要想输出内容到页面中,必须使用输出语句!

在代码块中,想输出文本,必须用这两个指令(函数),不使用指令则无法输出!

3、语句结束符  ;

<?php
echo 111,222;
print 111;
?>

特别注意,结束语句,要使用分号,不然会报错!

4、注释

<?php
// 这是单行注释
/*
这是多行注释
注释后,在浏览器和网页源码中,是看不到的。
*/
?>

注释后的文本,不会被解析成HTML,所以在浏览器查看源码也不会有注释内容!

注意:注释要写在代码内!

二、PHP变量

1、声明变量

<?php
$a = 'php中文网原创视频:《天龙八部》公益php培训系列课程汇总!';
echo $a;
?>

变量的优势是,多处应用同一值时,只用定义一次值,其它直接使用,在定义处修改,全部值就修改!

函数也是类似,定义一次,多次使用同一代码块!

2、赋值运算符

运算符 描述
= 赋值运算符

3、变量命名规则

  • 开头不能用数字
  • 中间不能有空格
<?php
# 下划线命名法
$new_title = 'php中文网原创视频:《天龙八部》公益php培训系列课程汇总!';
echo $new_title;
echo '<hr>';
# 小驼峰命名法
$newTitle = 'php中文网《玉女心经》公益PHP WEB培训系列课程汇总';
echo $newTitle;
echo '<hr>';
# 大驼峰命名法
$NewTitle = 'html5中submit是按钮么';
echo $NewTitle;
?>

三、html 和 php 混编——用PHP写前端网页文件!

必须在PHP文件下,才能实现HTML和PHP的文件混编!

以下HTML和PHP代码在浏览器中运行等价!

<header id="masthead" class="site-header" role="banner">
<hgroup>
<h1 class="site-title">
<a href="/" title="欧阳克个人博客" rel="home">欧阳克个人博客</a>
</h1>
<h2 class="site-description">欧阳克是PHP中文网的讲师,愿意把知识分享给大家。</h2>
</hgroup>
<nav id="site-navigation" class="main-navigation" role="navigation">
<ul class="nav-menu">
<li>
<a href="/index.html">首页</a>
</li>
<li>
<a href="/index.html?cate=1">服务器</a>
</li>
<li>
<a href="/index.html?cate=2">PHP</a>
</li>
<li>
<a href="/index.html?cate=3">前端</a>
</li>
<li>
<a href="/index.html?cate=4">Thinkphp</a>
</li>
<li>
<a href="/index.html?cate=5">Layui</a>
</li>
<li>
<a href="/index.html?cate=6">小程序</a>
</li>
</ul>
</nav>
</header>

这是PHP代码

  • 需要把文件的后缀名,改为:php
<header id="masthead" class="site-header" role="banner">
<hgroup>
<h1 class="site-title">
<a href="/" title="<?php echo '欧阳克个人博客'; ?>" rel="home"><?php echo '欧阳克个人博客'; ?></a>
</h1>
<h2 class="site-description"><?php echo '欧阳克是PHP中文网的讲师,愿意把知识分享给大家。'; ?> </h2>
</hgroup>
<nav id="site-navigation" class="main-navigation" role="navigation">
<ul class="nav-menu">
<li>
<a href="/index.html"><?php echo '首页'; ?></a>
</li>
<li>
<a href="/index.html?cate=1"><?php echo '服务器'; ?></a>
</li>
<li>
<a href="/index.html?cate=2"><?php echo 'PHP'; ?></a>
</li>
<li>
<a href="/index.html?cate=3"><?php echo '前端'; ?></a>
</li>
<li>
<a href="/index.html?cate=4"><?php echo 'Thinkphp'; ?></a>
</li>
<li>
<a href="/index.html?cate=5"><?php echo 'Layui'; ?></a>
</li>
<li>
<a href="/index.html?cate=6"><?php echo '小程序'; ?></a>
</li>
</ul>
</nav>
</header>
  • 变量输出
<?php
$title = 'php中文网原创视频:《天龙八部》公益php培训系列课程汇总!';
$img = 'https://img.php.cn/upload/course/000/000/001/5d242759adb88970.jpg';
$content = 'PHP中文网因专业的讲师水平和高效的视频质量,推出的各种视频课程系列一直以来都深受大家喜爱。特别是《天龙八部》系列、《独孤九贱》系列、《玉女心经》系列的原创课程在行业内更是具有强大的影响力,好评不断!为了让大家能更快速方便的寻找到相关教程资源,我们在这篇文章中特意将《天龙八部》系列课程整理出来供大家有针对性得学习!';
$data = '2021-02-18';
$class = 'PHP';
?>

<article>
<header class="entry-header">
<h1 class="entry-title">
<a href="/details.html" title="<?php echo $title; ?>" rel="bookmark"><?php echo $title; ?></a>
</h1>
</header>
<img style="width:200px;height:100px;" src="<?php echo $img; ?>" alt="" />
<div class="entry-content"><?php echo $content; ?></div>
<footer class="entry-meta">
发布于
<a href="/index.html?time=2021-02-18" title="2021-02-18" rel="bookmark">
<time class="entry-date" datetime="2021-02-18"><?php echo $data; ?></time>
</a>。 属于
<a href="/index.html?cate=4" title="查看 PHP中的全部文章" rel="category"><?php echo $class; ?></a> 分类
</footer>
</article>
</footer>
</article>

变量是一旦声明,就可以在后续使用,在HTML和PHP混编中,把标题等文本内容,当成是PHP变量,放在文档开始阶段定义,然后在编写HTML代码时,引用这些变量就行!

  • 第二条数据

相同的变量名,下面会把上面覆盖,也叫:重新赋值

<?php
$title = 'php中文网《玉女心经》公益PHP WEB培训系列课程汇总';
$img = 'https://img.php.cn/upload/course/000/126/153/5aa23f0ded921649.jpg';
$content = 'php中文网近期推出的《独孤九贱》系列、《天龙八部》系列、《玉女心经》原创视频课程,好评如潮!由于《玉女心经》系列课程没有做成专题,所以大家找起来有点费劲,为了更好的服务广大php中文网粉丝们,特把课程整理汇总给大家!';
$data = '2021-02-11';
$class = 'PHP';
?>

<article>
<header class="entry-header">
<h1 class="entry-title">
<a href="/details.html" title="<?php echo $title; ?>" rel="bookmark"><?php echo $title; ?></a>
</h1>
</header>
<img style="width:200px;height:100px;" src="<?php echo $img; ?>" alt="" />
<div class="entry-content"><?php echo $content; ?></div>
<footer class="entry-meta">
发布于
<a href="/index.html?time=2021-02-11" title="2021-02-11" rel="bookmark">
<time class="entry-date" datetime="2021-02-11"><?php echo $data; ?></time>
</a>。 属于
<a href="/index.html?cate=4" title="查看 PHP中的全部文章" rel="category"><?php echo $class; ?></a> 分类
</footer>
</article>

注意PHP代码是从上至下,依次解析执行,所以同一变量名,最终值会被最后出现的赋值替代掉,但是如果是赋值然后输出,再赋值,然后再输出,那么前一个输出和后一个输出会不一致,这就是逐条编译的特点!

假如多篇文章,都想要有个标题、日期,作者,但又不能都取同一个变量,那么数组是个好东西!


四、数据结构

一、php 标量数据类型

类型 描述
布尔型 Boolean true 和 false
整型 Integer 0 - 无限大
浮点型 Float 带小数的数字
字符串 String 汉字、英文、符合、其它国家语言,文本信息

比如一件商品,价格是浮点型,商品个数是整形,名字和介绍是字符串,有没有是布尔型!

echo 输出数据值,开发时使用
var_dump 可以打印数据类型和值,测试时使用

1、布尔型

  • 布尔型通常用于条件判断
<?php
$x = true;
var_dump($x);
echo '<hr>';
$y = false;
var_dump($y);
?>

2、整型

  • 整数不能包含逗号或空格
  • 整数是没有小数点的
  • 整数可以是正数或负数
  • 整型可以用三种格式来指定:十进制、十六进制、八进制
<?php
$number = 0;
var_dump($number);
echo '<hr>';
$number = 67;
var_dump($number);
echo '<hr>';
$number = -322;
var_dump($number);
?>

3、浮点型

  • 带小数部分的数字
<?php
$number = 10.03;
var_dump($number);
echo '<hr>';
$number = -88.23;
var_dump($number);
?>

4、字符串

<?php
$str = '我是欧阳';
var_dump($str);
echo '<hr>';
$str = 'My name is ou yang';
var_dump($str);
?>

注意:双引号内的变量,会被解析成值,单引号内的变量,不会解析,直接按文本处理!

一个中文字符占三个!

<?php
$str = '我是欧阳';
var_dump($str);
echo '<hr>';
$str = "$str My name is ou yang";
var_dump($str);
?>

二、php 复合数据类型

类型 描述
array 数组
object 对象
callable 可调用
iterable 可迭代

三、php 特殊数据类型

类型 描述
空值 NULL 表示变量没有值
resource 资源

1、NULL

  • NULL 值表示变量值为空值!
<?php
$null; //会报错!
var_dump($null);
echo '<hr>';
$null = '';
var_dump($null);
echo '<hr>';
$null = null; //这才是真正的null值!
var_dump($null);
?>
image-20230428185454834

二、php 复合数据类型

1数组

类型 描述
数组 Array 数组可以在一个变量中存储多个值

1、创建空数组

$arr = array();
var_dump( $arr );
$arrs = [];
var_dump( $arrs );

2、创建索引数组

访问数组数据,可以把数组看成是有顺序的一组变量,里面的数据是单个变量排列而成!

注意:数组中的数据,是由键和值,一对一对的组成的!也就是说,这种数组,是类似对象,可以以键来访问值!

  • 输出值echo();
<?php
$arr = array(
'你好',
'世界',
'我是',
'你大爷'
);
echo $arr; //会报错,数组是复合数据类型,直接输出是错误的!
echo $arr[0]; //就可以访问了
?>

3、创建关联数组

注意:默认情况下,数组的数据会自动排序,每个数据都会分配一个索引,可以通过索引访问每一个数据,并且可以自定义这个键,通过键去访问值!

4、输出数组值

<?php
$arr = array(
'hello' => '你好',
'世界',
'我是',
'你大爷'
);
echo $arr['hello'];
?>

键要用引号,在访问时,也要给键加上引号!键和值之间用=>连起来!

注意:没有自定义的数据中,重新按照0开始给数据分配索引!

<?php
$arr = array(
'你好哈' => '你好',
'世界',
'我是',
'你大爷'
);
echo $arr['你好哈']; //键可以是中文
echo $arr[3]; //会报错,从新分配索引后,现在最后一个数据的索引为2!
?>

5、打印数组 print_r

  • 输出整个数组print_r();
<?php
$arr = array(
'你好哈' => '你好',
'世界',
'我是',
'你大爷'
);
print_r($arr);
?>

鼠标右击点击查看源代码,更方便查看键(key)和值(value)

<?php
$arr = array(
'hello' => '你好',
'世界',
'我是',
'你大爷'
);
var_dump($arr);
echo '<hr/>';
$arr2 = [
'hello' => '你好',
'世界',
'我是',
'你大爷'
];
print_r($arr2);
?>

6、php 连接符

打印时,字符串之间用.连接!

<?php
$arr = array(
'你好哈' => '你好',
'世界',
'我是',
'你大爷'
);
echo '欢迎你' . ' ' . $arr['你好哈'];
?>

二、php多维数组

1、二维数组

当数组内存放数组类型时,就是多维数组;在数组里面,只要有一个数组类型的数据,那么就是个二维数组!

<?php
$arr = array(
array(
'你好哈' => '你好',
'世界',
),
array(
'我是'
),
'我是',
'你大爷'
);
echo $arr[3]; //注意,即使是数组,放在数组当中,也是个数据,与其它数据规则一致!
echo '<hr/>';
print_r($arr);
?>

image-20230428190018245

注意:数据类型的数据也是数据!和变量以及变量名要理清!

array()[]也是数据,当这些数据放在数组中,会自动创建索引!数据间用,隔开!

2、三维数组

<?php
$arr = array(
array(
'你好哈' => '你好',
'世界',
[
'我是',
'你大爷'
]
),
array(
'我是'
),

);
echo $arr[0][1][1];
echo '<hr>';
print_r($arr);
?>

在打印多层数组时,使用print_r();会更清晰!

不建议套太多层!多层数组,多重数组的数据访问可以采用向右消元,来查看单独的数据!

<?php
$arr = [
[
'name' => '欧阳',
'school' => 'PHP中文网',
'gongfu' => [
'PHP',
'小程序',
'layui',
'Thinkphp'
]
],
[
'name' => '西门',
'school' => 'PHP中文网',
'gongfu' => [
'PHP',
'Thinkphp',
'Laravel',
'实战项目'
]
],
[
'name' => '灭绝',
'school' => 'PHP中文网',
'gongfu' => [
'HTML',
'PHP',
'layui',
'Thinkphp'
]
]
];
echo $arr[0]['name']; //打印单个数据用echo
echo '<hr>';
echo $arr[0]['gongfu'][1];
echo '<hr>';
echo $arr[0]['gongfu'][1] . '使用' . $arr[2]['gongfu'][1];
echo '<hr>';
print_r($arr); //打印复合数据,用print_r();
?>

备:数组访问时,层次不要弄错

三、php 数组循环,遍历数组!

1、foreach

$arr = array(
'ouyang' => '欧阳',
'ximen' => '西门',
'miejue' => '灭绝'
);
foreach( $arr as $v ){
echo $v;
echo '<hr>';
}

foreach(形参1 as 形参2){循环体}:形参中填入(数组 as 键 => 值)

2、keyvalue形参

$k 和 $v,变量名,可以自定义

<?php
$arr = array(
'ouyang' => '欧阳',
'ximen' => '西门',
'miejue' => '灭绝'
);
$num = 0;
foreach( $arr as $k => $v ){
// echo $num++; //可以看出是循环,循环次数和数据个数有关!遍历数组!
echo $v; //这是单独的数据
echo '<hr>';
echo '这是键:' . $k . '; ' . '这是值:' . $v; //还可以添加键
echo '<hr>';
}
?>

3、循环多维数组

遍历一次循环数组,使用print_r($v);打印数组

示例1
$arr = [
[
'name' => '欧阳',
'school' => 'PHP中文网'
],
[
'name' => '西门',
'school' => 'PHP中文网'
],
[
'name' => '灭绝',
'school' => 'PHP中文网'
]
];
foreach( $arr as $k=>$v ){
print_r($v);
echo '<hr>';
}

遍历数组中数组的值,使用echo打印值!

示例3
$arr = [
[
'name' => '欧阳',
'school' => 'PHP中文网'
],
[
'name' => '西门',
'school' => 'PHP中文网'
],
[
'name' => '灭绝',
'school' => 'PHP中文网'
]
];
foreach( $arr as $k=>$v ){
echo $v['name'].' --- '.$v['school']; //注意:虽然下标一致,但每次循环时数组不同
echo '<hr>';
}

image-20230428195016981

  • 嵌套循环,遍历数组!
<?php
$arr = [
[
'name' => '欧阳',
'school' => 'PHP中文网'
],
[
'name' => '西门',
'school' => 'PHP中文网'
],
[
'name' => '灭绝',
'school' => 'PHP中文网'
]
];
foreach( $arr as $k=>$v ){
foreach( $v as $va){
echo $va; //这里只打印了值,还可以打印键!
echo '<hr>';
}
echo '<hr>';
}
?>

image-20230428195955584

项目实战

把HTML改写成PHP

<li>
<a href="/index.html"><?php echo '首页'; ?></a>
</li>
<li>
<a href="/index.html?cate=1"><?php echo '服务器'; ?></a>
</li>
<li>
<a href="/index.html?cate=2"><?php echo 'PHP'; ?></a>
</li>
<li>
<a href="/index.html?cate=3"><?php echo '前端'; ?></a>
</li>
<li>
<a href="/index.html?cate=4"><?php echo 'Thinkphp'; ?></a>
</li>
<li>
<a href="/index.html?cate=5"><?php echo 'Layui'; ?></a>
</li>
<li>
<a href="/index.html?cate=6"><?php echo '小程序'; ?></a>
</li>

改写:找到重复的地方!比如这个

  • 里面的内容,大多数是重复的,只有中间的内容是不重复的,放入到数组中,使用foreach遍历数组实现!

    <?php
    $arr = [
    '首页',
    '服务器',
    'PHP',
    '前端',
    'Thinkphp',
    'Layui',
    '小程序'
    ];

    foreach($arr as $val){
    echo "<li><a href='/index.html'>$val</a></li>";
    }

    // foreach也可以换成这个样子
    // foreach($arr as $val){
    // echo '<li>'
    // echo '<a href='/index.html'>'.$val.'</a>';
    // echo '</li>';
    // }
    ?>

    以后把这种数据可以放入到数据库中,建立个后台来向数据库添加,然后前端数据从数据库调取,就可以实现不同用户展示不同内容了!

    但是作为前端开发人员,要避免不同代码混编,混乱不堪!

    • 把HTML代码和PHP代码完全分割,需要PHP才使用PHP代码!
    <?php
    $arr = [
    '首页',
    '服务器',
    'PHP',
    '前端',
    'Thinkphp',
    'Layui',
    '小程序'
    ];
    ?>
    <?php
    foreach($arr as $val){
    ?>
    <li>
    <a href='/index.html'><?php echo $val ?></a>
    </li>
    <?php
    }
    ?>

    案例文章

    <?php
    $title = 'php中文网原创视频:《天龙八部》公益php培训系列课程汇总!';
    $img = 'https://img.php.cn/upload/course/000/000/001/5d242759adb88970.jpg';
    $content = 'PHP中文网因专业的讲师水平和高效的视频质量,推出的各种视频课程系列一直以来都深受大家喜爱。特别是《天龙八部》系列、《独孤九贱》系列、《玉女心经》系列的原创课程在行业内更是具有强大的影响力,好评不断!为了让大家能更快速方便的寻找到相关教程资源,我们在这篇文章中特意将《天龙八部》系列课程整理出来供大家有针对性得学习!';
    $data = '2021-02-18';
    $class = 'PHP';
    ?>

    <article>
    <header class="entry-header">
    <h1 class="entry-title"><a href="/details.html" title="构建NginxPHP镜像" rel="bookmark"><?php echo $title ?></a></h1>
    </header>
    <div class="entry-content"><?php echo $content ?></div>
    <img src="<?php echo $img ?>" alt="">

    <footer class="entry-meta">
    发布于
    <a href="/index.html?time=2020-10-02" title="2020-10-02" rel="bookmark">
    <time class="entry-date" datetime="2020-10-02"><?php echo $data ?></time>
    </a>。 属于
    <a href="/index.html?cate=4" title="查看 Linux中的全部文章" rel="category"><?php echo $class ?></a> 分类
    </footer>

    </article>;

    这是一篇文章的写法,把其中共同属性提取出来!制作成变量!还可以把所有文章的这些信息存放在数组中,把文章的重复部分也拿出来,把可以替换的数据,使用数组保存!使用二维数组,一个数组保存一个文章中的标题日期等信息,不同数组,保存不同文章的这些信息

    <?php
    $lists = [
    [
    'title' => 'php中文网原创视频:《天龙八部》公益php培训系列课程汇总!',
    'img' => 'https://img.php.cn/upload/course/000/000/001/5d242759adb88970.jpg',
    'content' => 'PHP中文网因专业的讲师水平和高效的视频质量,推出的各种视频课程系列一直以来都深受大家喜爱。特别是《天龙八部》系列、《独孤九贱》系列、《玉女心经》系列的原创课程在行业内更是具有强大的影响力,好评不断!为了让大家能更快速方便的寻找到相关教程资源,我们在这篇文章中特意将《天龙八部》系列课程整理出来供大家有针对性得学习!',
    'data' => '2021-02-18',
    'class' => 'PHP'
    ],
    [
    'title' => 'php中文网原创视频:《天龙八部》公益php培训系列课程汇总!',
    'img' => 'https://img.php.cn/upload/course/000/000/001/5d242759adb88970.jpg',
    'content' => 'PHP中文网因专业的讲师水平和高效的视频质量,推出的各种视频课程系列一直以来都深受大家喜爱。特别是《天龙八部》系列、《独孤九贱》系列、《玉女心经》系列的原创课程在行业内更是具有强大的影响力,好评不断!为了让大家能更快速方便的寻找到相关教程资源,我们在这篇文章中特意将《天龙八部》系列课程整理出来供大家有针对性得学习!',
    'data' => '2021-02-18',
    'class' => 'PHP'
    ],
    [
    'title' => 'php中文网原创视频:《天龙八部》公益php培训系列课程汇总!',
    'img' => 'https://img.php.cn/upload/course/000/000/001/5d242759adb88970.jpg',
    'content' => 'PHP中文网因专业的讲师水平和高效的视频质量,推出的各种视频课程系列一直以来都深受大家喜爱。特别是《天龙八部》系列、《独孤九贱》系列、《玉女心经》系列的原创课程在行业内更是具有强大的影响力,好评不断!为了让大家能更快速方便的寻找到相关教程资源,我们在这篇文章中特意将《天龙八部》系列课程整理出来供大家有针对性得学习!',
    'data' => '2021-02-18',
    'class' => 'PHP'
    ],
    [
    'title' => 'php中文网原创视频:《天龙八部》公益php培训系列课程汇总!',
    'img' => 'https://img.php.cn/upload/course/000/000/001/5d242759adb88970.jpg',
    'content' => 'PHP中文网因专业的讲师水平和高效的视频质量,推出的各种视频课程系列一直以来都深受大家喜爱。特别是《天龙八部》系列、《独孤九贱》系列、《玉女心经》系列的原创课程在行业内更是具有强大的影响力,好评不断!为了让大家能更快速方便的寻找到相关教程资源,我们在这篇文章中特意将《天龙八部》系列课程整理出来供大家有针对性得学习!',
    'data' => '2021-02-18',
    'class' => 'PHP'
    ],

    ]
    ?>
    <?php
    foreach($lists as $lists_v){
    ?>

    <article>
    <header class="entry-header">
    <h1 class="entry-title"><a href="/details.html" title="构建NginxPHP镜像" rel="bookmark"><?php echo $lists_v['title'] ?></a></h1>
    </header>
    <div class="entry-content"><?php echo $lists_v['content'] ?></div>
    <img src="<?php echo $lists_v['img'] ?>" alt="">
    <footer class="entry-meta">
    发布于
    <a href="/index.html?time=2020-10-02" title="2020-10-02" rel="bookmark">
    <time class="entry-date" datetime="2020-10-02"><?php echo $lists_v['data'] ?></time>
    </a>。 属于
    <a href="/index.html?cate=4" title="查看 Linux中的全部文章" rel="category"><?php echo $lists_v['class'] ?></a> 分类
    </footer>
    </article>

    <?php
    }
    ?>

    注意:先定义数组<?php 定义数组 ?>,再使用数组中的数据<?php for(){ ?>待循环数据<?php } ?>

    最后在待循环数组中,把提取的数据替换进去<?php echo 数组中的key ?>!注意数组中数据的写法,是通过打印数组的键,使用echo!由于内部数组键值相同!

    当某一篇文章不需要图片或者其它内容,怎么办?直接删除其数组中的数据,解析后会报错!^1

    函数

    一、php 条件判断

    1、三元运算符 ? :

    $name = '欧阳';
    echo $name ? '我是欧阳克' : '我也不知道我是谁';

    ?前面是判断条件,:左右是两个选项,这里把变量$name当作判断条件,意味着变量存在非空、非未定义,非假值等情况下,执行前面的,这里的实际意义是,判断变量是否被赋值!

    2、if

    $ouyang = '欧阳';
    if($ouyang){
    echo $ouyang;
    }

    3、if else

    $ouyang = '欧阳';
    if($ouyang){
    echo $ouyang;
    }else{
    echo '灭绝师太';
    }

    if是匹配的条件语句,else是匹配不上条件时,执行的代码!条件语句可以是变量,可以是运算结果!

    4、if elseif else

    $ouyang = '欧阳';
    $miejue = '灭绝师太';

    if($ouyang){
    echo $ouyang;
    }else if($miejue){
    echo $miejue;
    }else{
    echo '西门大官人';
    }

    5、switch case default

    $str = 'ximen';
    switch ($str) {
    case 'ouyang':
    echo '我是欧阳';
    case 'miejue':
    echo '我是灭绝师太';
    case 'ximen':
    echo '我是西门大官人';
    default:
    echo '我不知道我是谁';
    }

    switch是待匹配选项,case是匹配的值,与匹配选项的关系是 是否相等 然后接上执行代码,是if的特殊版本,底层逻辑还是if语句!default是所有条件都不满足时,执行的代码,与else含意相同!

    6、break

    • 结束当前代码,所属区域的代码块结束!放在条件或者循环中,放在条件中,可以防止穿透!
    $str = 'ximen';
    switch ($str) {
    case 'ouyang':
    echo '我是欧阳';
    break;
    case 'miejue':
    echo '我是灭绝师太';
    break;
    case 'ximen':
    echo '我是西门大官人';
    break;
    default:
    echo '我不知道我是谁';
    break;
    }

    7、PHP8 新特性 match

    $str = 'ximen';
    echo match ($str) {
    'ouyang' => '我是欧阳',
    'miejue' => '我是灭绝师太',
    'ximen' => '我是西门大官人'
    };
    • 与switch语法类似match中填写待匹配选项,内部匹配和执行代码的表现形式是键、值!
    • 键的地方,书写匹配值,值的地方,书写返回给match()的值!只能返回一个值!严格匹配!
    • match可以返回值,可以赋值给其它变量

    匹配多条件、默认值

    $str = 'ouyang';
    echo match ($str) {
    'miejue','miejueshitai' => "我是灭绝师太",
    'ximen','ximendaguanren' => "我是西门大官人",
    default => '我是欧阳',
    };
    • 匹配可以多个,默认值,只能有一个!

    备:没有默认值,会报错的

    8、switchmatch 对比

    match与swith的区别:

    match 表达式基于值的一致性进行分支计算。 match表达式和 switch 语句类似, 都有一个表达式主体,可以和多个可选项进行比较。 与 switch 不同点是,它会像三元表达式一样求值。 与 switch 另一个不同点,它的比较是严格比较===而不是松散比较==

    macth注意点:

    • match使用 ===进行严格比较;

    • match表达式必须以;结尾;

    match表达式与switch的区别:

    • match 比较分支值,使用了严格比较 (===), 而 switch 语句使用了松散比较。
    • match 表达式会返回一个值。
    • match 的分支不会像 switch 语句一样, 落空时执行下个 case。
    • match 表达式必须彻底列举所有情况。

    二、函数介绍

    1、什么是函数

    • 函数是一段可以重复执行的代码片断
    • 函数是实现代码复用的重要手段
    • 函数是现代编程语言最重要的基本单元
    • 函数永远是编程的核心工作

    2、函数的分类

    • 根据函数的提供者(编写者),分为二类
      • 系统函数: 编程语言开发者事先写好提供给开发者直接使用的
      • 自定义函数: 用户根据自身需求,对系统功能进行扩展

    三、系统函数

    官网手册:https://www.php.net/manual/zh/funcref.php

    • PHP 的真正力量来自它的函数:它拥有超过 1000 个内建的函数。
    函数集合名 描述
    String 字符串处理函数
    Array 数组函数允许您访问和操作数组
    MySQLi 允许您访问 MySQL 数据库服务器
    Date 服务器上获取日期和时间
    Filesystem 允许您访问和操作文件系统
    Mail 数学函数能处理 integer 和 float 范围内的值
    HTTP 允许您在其他输出被发送之前,对由 Web 服务器发送到浏览器的信息进行操作
    Calendar 日历扩展包含了简化不同日历格式间转换的函数
    Directory 允许您获得关于目录及其内容的信息
    Error 允许您对错误进行处理和记录
    Filter 进行验证和过滤
    FTP 通过文件传输协议 (FTP) 提供对文件服务器的客户端访问
    MySQL 允许您访问 MySQL 数据库服务器
    SimpleXML 允许您把 XML 转换为对象
    XML 允许我们解析 XML 文档,但无法对其进行验证
    Zip 压缩文件函数允许我们读取压缩文件

    1、String 字符串函数

    函数 描述
    strtolower() 将字符串转化为小写
    strtoupper() 将字符串转化为大写
    strlen() 获取字符串长度
    trim() 去除字符串首尾处的空白字符(或者其他字符)
    ltrim() 去除字符串开头的空白字符(或者其他字符)
    rtrim() 去除字符串结尾的空白字符(或者其他字符)
    str_replace() 字符串替换
    strpbrk() 字符串中查找一组字符是否存在
    explode() 将字符串分割为数组
    md5() 将字符串进行md5加密
    // 将字符串转化为小写
    $ouyang = 'OUYANGKE';
    echo strtolower($ouyang);
    echo '<hr>';

    // 将字符串转化为大写
    $miejue = 'miejueshitai';
    echo strtoupper($miejue);
    echo '<hr>';

    // 将字符串分割为数组
    $php = '欧阳克,灭绝师太,西门大官人,天蓬';
    print_r ( explode(',',$php) );
    echo '<hr>';

    // 将字符串进行md5加密
    $ximen = '西门大官人';
    echo md5($ximen);

    2、Array 数组函数

    函数 描述
    count() 数组中元素的数量
    implode() 把数组元素组合为字符串
    array_merge() 两个数组合并为一个数组
    in_array() 数组中是否存在指定的值
    sort() 对数值数组进行升序排序
    rsort() 对数值数组进行降序排序
    array_unique() 移除数组中的重复的值
    array_push() 将一个或多个元素插入数组的末尾
    array_pop() 删除数组中的最后一个元素
    $arr = [
    '欧阳克',
    '灭绝师太',
    '西门大官人',
    '天蓬'
    ];
    // 数组中元素的数量
    echo count($arr);
    echo '<hr>';

    // 把数组元素组合为字符串
    echo implode(',',$arr);
    echo '<hr>';

    // 数组中是否存在指定的值
    echo in_array('天蓬',$arr);
    echo '<hr>';

    // 删除数组中的最后一个元素
    array_pop($arr);
    print_r($arr);

    3、函数–在判断条件中使用的函数

    https://www.php.net/manual/zh/function.isset.php

    # 直接判断不存在的变量,会报错
    if($miejue){
    echo '灭绝师太';
    }

    # 使用isset函数判断
    if(isset($miejue)){
    echo '灭绝师太';
    }

    # 使用empty函数判断
    if(empty($miejue)){
    echo '灭绝师太';
    }

    注意:^2

    • **isset() **— 检测变量是否已声明并且其值不为 null

      • 返回值:如果 var 存在并且值不是 null 则返回 **true**,否则返回 **false**。
      • 使用时:可以不定义变量,那么不执行,定义变量,那么就执行!
    • empty() — 判断变量是否为是空。当变量不存在或者它的值等于 **false**,那么视为空。

      • 返回值:当 var 不存在、值为空、等于 0、为 false 时,返回 **true**。参阅 转换为 boolean。否则返回 **false**。

      • 如果变量不存在,empty() 不会产生警告。

      • 使用时:必须定义变量,可以在值中不赋值,那么就执行,赋值就不执行,取反就与inset类似!

    四、自定义函数

    1、函数的基本语法

    // 创建函数
    function fun_name(参数列表)
    {
    //函数体: 由一条或多条语句组成,可以为空
    }
    • 必须使用关键字:function 声明
    • 函数名称不区分大小写,多个单词推荐使用下划线连接

    2、调用函数

    先创建,再调用!创建一次,可以无数次调用,这样就可以复用代码块了!

    // 创建函数
    function fun_name()
    {
    return '我是:欧阳克';
    }

    // 调用函数
    echo fun_name();

    3、函数参数

    // 创建函数
    function fun_name($name)
    {
    return '我是:' . $name;
    }

    // 调用函数
    echo fun_name('欧阳克');
    • 方法参数可以有默认值,有默认值可以不传值
    • 方法必须以返回的方式,不要用 echo 输出的方式
    // 创建函数
    function fun_name($name,$school='PHP中文网')
    {
    return '我是:' . $name . ',我来至:' . $school;
    }

    // 调用函数
    echo fun_name('欧阳克','过去的世界');

    4、作用域

    • php中, 只有函数作用域和全局作用域
    • 所有函数作用域中的变量,外部不可见
    • 全局作用域声明变量,在函数中是可见的
    $name = '灭绝师太';
    $school = 'PHP中文网';
    // 创建函数
    function fun_name()
    {
    global $name;
    global $school;
    return '我是:' . $name . ',我来至:' . $school;
    }

    // 调用函数
    echo fun_name();

    5、PHP8 新特性:命名参数

    PHP7

    可以赋予初始值,但形参和实参位置是一一对应的!

    function jisuan($a,$b=0,$c=0,$d=0){
    echo $a;
    echo '<hr/>';
    echo $b;
    echo '<hr/>';
    echo $c;
    echo '<hr/>';
    echo $d;
    echo '<hr/>';
    }

    jisuan(10,20,30,40);

    PHP8

    不仅可以赋予初始值,调用函数时,实参中可以指定形参名字,再赋值!

    function jisuan($a,$b=0,$c=0,$d=0){
    echo $a;
    echo '<hr/>';
    echo $b;
    echo '<hr/>';
    echo $c;
    echo '<hr/>';
    echo $d;
    echo '<hr/>';
    }

    jisuan(10,20,d:30,c:40);

    数据类型——运算

    一、php 运算符

    运算符 描述
    + 相加
    - 相减
    * 相乘
    / 相除
    % 取余
    ++ 加加
    -- 减减
    . 连接、用在字符串

    注意:++--适用于变量,当参与其它运行时,放在变量前后与运算顺序有关!

    二、php 赋值运算符

    运算符 描述
    = 赋值运算符
    += 先加,后赋值
    -= 先减,后赋值
    *= 先乘,后赋值
    /= 先除,后赋值
    %= 先取余,后赋值
    .= 先连接,后赋值

    注意:这些相当于是++--的升级版,可以自定义变量自身参与的算术运算!

    三、php 比较运算符

    运算符 描述
    > 大于
    >= 大于等于
    < 小于
    <= 小于等于
    == 等于
    != 不等于
    === 恒等于
    !== 恒不等

    注意:==是仅比较值,不比较数据类型!===是严格,比较值也比较数据类型,完全一致才相等!

    PHP8 新特性:字符串与数字的比较
    var_dump( '欧阳' > 100 );
    echo '<hr>';
    var_dump( '欧阳' < 100 );
    echo '<hr>';
    var_dump('欧阳' == 0);

    数字字符串(numeric string)时,会按数字进行比较。

    不是数字字符串时,将数字转化为字符串,按字符串比较。

    //php7
    0 == 'foobar' // true

    //php8
    0 == 'foobar' // false

    四、php 逻辑运算符

    运算符 描述
    and&&
    or 和 `
    xor 异或
    !

    注意:xor在布尔值的运算中,当两个布尔值相同为假,不同为真!

    案例:

    1、图片判断

    <?php
    if(isset($article_v['img'])){
    ?>
    <img style="width:200px;height:100px;" src="<?php echo $article_v['img'] ?>" alt="" />
    <?php
    }
    ?>

    **isset() **:检测变量是否已声明并且其值不为 null

    //没有判断时,删除数组中的数据时,HTML显示错误信息
    <?php
    echo $lists_v['title'];
    ?>

    //加入判断后!缺少数据也不会报错!不定义变量,那么不执行,定义变量,那么就执行!
    <?php
    if(isset($lists_v['title'])){
    echo $lists_v['title'];
    }
    ?>

    也可以改为下方的判断, 不赋值给变量

    //当值为空是,也就是把赋给的值删除时,返回值是ture,当有值时,返回是false,所以要再取反!
    <?php
    if(!empty($lists_v['content'])){
    echo $lists_v['content'];
    }
    ?>

    函数结构——循环

    1、while

    $int = 1;
    while ( $int < 10 ) {
    echo $int;
    echo '<hr/>';
    $int ++;
    }

    2、do while

    $int = 1;
    do {
    echo $int;
    echo '<hr>';
    $int++;
    }while ( $int < 1);

    注意:按顺序执行,最后while();加上;结束语句!

    3、for

    示例1:
    for( $int=1; $int<10; $int++){
    echo $int;
    echo '<hr>';
    }
    示例2:
    for( $int=1; $int<10; $int++){
    if($int == 5){
    echo '等于5,单独输出';
    }else{
    echo $int;
    }
    echo '<hr>';
    }

    结束循环

    4、continue

    • 结束当前循环,进入下次循环
    • 在循环语句中使用 while for
    for( $int=1; $int<10; $int++){
    if($int == 5){
    //结束当前循环,进入下次循环
    continue;
    }
    var_dump($int);
    echo '<hr>';
    }

    5、break

    • 结束循环
    • 在循环语句中使用 while for switch
    • 可以跳出多层循环
    示例1
    for( $int=1; $int<10; $int++){
    if($int == 5){
    //结束当前循环,进入下次循环
    break;
    }
    var_dump($int);
    echo '<hr>';
    }

    注意:可以跳出多层循环,直到没有循环!

    PHP8新特性:JIT

    一、PHP 运行速度测试

    1、新建php文件

    <?php
    // 返回当前时间戳的微秒数
    $start = microtime(true) ;

    $total = 0;
    for ($i=0; $i < 1000000; $i++) {
    $total += $i;
    }

    echo "Count: ".$i.",Total: " . $total . "\n";

    // 返回当前时间戳的微秒数
    $end = microtime(true);

    // 计算开始到结束,所用时间
    $spend = floor(($end - $start) * 1000);

    echo "Time use: " . $spend . " ms\n";
    ?>

    image-20230430150221271

    二、JIT (即时编译)编译器

    • JIT (Just-In-Time)即时编译器是 PHP 8.0 中最重要的新功能之一,可以极大地提高性能。
    • JIT 编译器将作为扩展集成到 phpOpcache 扩展 用于运行时将某些操作码直接转换为从 cpu 指令。 仅在启用 opcache 的情况下,JIT 才有效

    1、Opcache 扩展

    • OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是:省去了每次加载和解析 PHP 脚本的开销。

    2、Opcache 开启

    • 文件位置:softs\php\php-8.0.2-nts\php.ini
    zend_extension=opcache

    3、Opcache 配置

    ; Determines if Zend OPCache is enabled
    opcache.enable=1

    ; Determines if Zend OPCache is enabled for the CLI version of PHP
    opcache.enable_cli=0

    ; The OPcache shared memory storage size.
    opcache.memory_consumption=128

    ; The amount of memory for interned strings in Mbytes.
    opcache.interned_strings_buffer=8

    ; The maximum number of keys (scripts) in the OPcache hash table.
    ; Only numbers between 200 and 1000000 are allowed.
    opcache.max_accelerated_files=10000

    4、JIT 配置(新增)

    opcache.jit=tracing
    opcache.jit_buffer_size=100M

    5、JIT 速度测试

    image-20230430150134891

    6、php 扩展目录

    extension_dir = "ext"