PHP复习资料

特别鸣谢:@NLER提供雨课堂数据

(未完待续,请持续关注此板块)
【计科三四】雪课堂PHP期末模拟题:https://ks.wjx.top/vm/tUAmjxq.aspx#
【计科一二】PHP第一章练习题 https://ks.wjx.top/vm/QnjHad4.aspx#
【计科一二】PHP第二章练习题 https://ks.wjx.top/vm/h2FvEVI.aspx#
【计科一二】PHP第三章练习题 https://ks.wjx.top/vm/mDvpYRP.aspx#
【计科一二】PHP第四章练习题 https://ks.wjx.top/vm/Pj7n0AW.aspx#
【计科一二】PHP第五章练习题 https://ks.wjx.top/vm/wBNmk7o.aspx#
【计科一二】PHP第六章练习题 https://ks.wjx.top/vm/tU0jnyJ.aspx#
【计科一二】PHP第七章练习题 https://ks.wjx.top/vm/eqtTMy8.aspx#

以下内容都是博主根据上面的练习题逆向整理的

第1章

1.1 PHP入门

PHP开发环境有:Notepad++NetBeansZend StudioPhpStormVisual Studio Code

PHP可以在 windows环境上跑,也可以在linux环境下运行

PHP是基于B/S架构的脚本语言,运行于服务器端,不能通过浏览器运行

1.2 Apache

Apache 默认监听的端口号是 80

安装Apache 时,conf目录是Apache服务器的配置目录

  • 主文件配置:httpd.conf
  • 辅文件配置:extra目录下的httpd-vhosts.conf

默认情况下,辅配置文件不开启。
在这里插入图片描述

1.2.1 配置 Apache

在这里插入图片描述

将Apache解压后,需要配置安装路径才可以使用
(安装完还不能直接使用)

Apache默认是不支持PHP运行的,我们可以通过在Apache的配置文件中加载PHP模块功能。

1、加载模块
LoadModule php7_module “c:/web/php7.4/php7apache2_4.dll”
2、指定php的文件类型
AddType application/x-httpd-php .php
3、指定配置目录
PHPIniDir “c:/web/php7”

配置安装路径

ServerRoot配置项用于配置Apache的安装目录

使用Notepad++编辑器打开Apache的配置文件“htdocs\httpd.conf”,执行文本替换,将原来的“c:/Apache24”全部替换为“c:/web/apache2.4”。

配置服务器域名

ServerName 配置项用于配置Apache的服务器域名

打开 httpd.conf,在里面搜索“ServerName”,找到下面一行配置(如下面的代码块)。下述代码开头的“#”表示该行是注释文本,应删去“#”使其生效,如下所示。

#ServerName www.example.com:80

上述配置中,“www.example.com”是一个示例域名,若不需要指定域名,也可以更改为本机地址,如“127.0.0.1”或“localhost”。

ServerName www.example.com:80

其他配置项

DocumentRoot指令用来设置httpd提供服务的目录。即你所在项目入口处的文件夹。

Deny from all 表示拒绝所有的访问
Allow from all 表示允许所有的访问

1.2.2 安装 Apache
  1. 切换命令行到 Apache 安装目录
cd C:\web\apache2.4\bin
  1. Apache核心安装命令: httpd.exe -k install
1.2.3 启动 Apache

在命令提示符下输入net start apache2.4命令来启动apache2.4服务

1.2.4 其他

通过编辑apache配置文件httpd.conf,找到AddType application/x-httpd-php 进行修改,修改为:AddType application/x-httpd-php .php .jsp,这样PHP就可以执行扩展名为“.jsp”的程序。

1.3 MySQL

MySQL 的默认端口:3306

当需要使用PHP操作MySQL数据库时,需要在php.ini文件中开启的扩展为extension=php_mysqli.dll

DDL
查看数据库:SHOW DATABASES; (查看已有的数据库)
创建数据库:CREATE DATABASE `db`; (创建一个名称为db的数据库)
选择数据库:USE `db`; (选择数据库db进行操作)
删除数据库:`DROP DATABASE `db`; (删除数据库db)

在这里插入图片描述

DTL

在这里插入图片描述

DML

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其他

在查询SQL语句中LIKENOT LIKE用于模糊查询,% 表示一个或多个字符

第二章

2.1 PHP的数据类型

  • 标量数据类型:String(字符串)、Integer(整型)、Float(浮点型)、Boolean(布尔型)
  • 复合数据类型:Array(数组)、Object(对象)
  • 特殊数据类型:NULL(空值)、Resource(资源)

2.2 PHP 传值赋值 和 引用赋值

PHP 支持引用赋值,使用$var = &$othervar;语法。
引用赋值意味着两个变量指向了同一个数据,没有拷贝任何东西。

示例:

<?php
$a = 10;
$b = &$a;
$b = 20;
echo $a. '--'. $b;
// 运行结果:20--20
?>

2.3 PHP中的 foreach 循环

<?php
$info = ['id' => 1, 'Jac', 'age' => 18];
foreach ($info as $k => $v) {
    echo $k . ': ' . $v . ' ';
}
// 运行结果:id: 1 0: Jac age: 18

2.4 && || and or的区别

优先级从高到低:&& > || > and >> or

  • && 和 || 的优先级高于 and 和 or
  • && 和 || 是左结合的,而 and 和 or 是右结合的
  • && 和 || 的运算结果是布尔值,而 and 和 or 的运算结果是最后一个计算的操作数

举个例子:

<?php
$a = true;
$b = false;
$c = true;

var_dump($a && $b || $c); // bool(true)
var_dump($a and $b || $c); // bool(false)

var_dump($a || $b && $c); // bool(true)
var_dump($a or $b && $c); // bool(true)

var_dump(true && false); // bool(false)
var_dump(true and false); // bool(true)
?>

2.5 round(), floor(), ceil() 的区别

在PHP中,round()、floor()、ceil()都是用于处理数字的函数,它们的主要区别如下:

  • round():把一个浮点数四舍五入为最接近的整数。如果小数部分为0.5,则根据偶数舍去或进位。
  • floor():把一个浮点数向下取整为最接近的整数。即舍去小数部分,返回不大于原数的整数。
  • ceil():把一个浮点数向上取整为最接近的整数。即进位到最接近的整数,返回不小于原数的整数。

总的来说,round()函数在处理小数时比较精确,而floor()和ceil()函数主要用于处理需要向下或向上取整的情况。

2.6 可变变量

在 PHP 中,可变变量是一种非常独特的特性,它允许您动态地为变量赋值,并且通过对变量名进行操作,来访问和修改该变量的值。

可变变量的语法是在变量名前面加上两个美元符号($$)。例如,假设您有一个名为$var的变量,您可以创建一个可变变量,以便它的名称由另一个变量$var1指定:

$var = 'Hello World!';
$var1 = 'var';
echo $$var1; // Hello World!

这将输出 ‘Hello World!’,因为可变变量$$var1实际上是$var

可变变量在某些情况下非常有用,例如在使用 关联数组 时,您可以动态地为数组项赋值:

$fruit = 'apple';
$$fruit = 5;
echo $apple; // 5

这将输出 5,因为通过可变变量,我们为数组项 $apple 赋值为5。

需要注意,可变变量在某些情况下可能会使您的代码更难以阅读和维护,因此应该谨慎使用。

2.7 字符串拼接

在 PHP 中,可以使用点(.)运算符来拼接字符串。

例如,如果要拼接两个字符串 $str1 和 $str2,可以使用以下语法:

$newstr = $str1 . $str2;

也可以使用复合赋值运算符 .= 来将另一个字符串添加到已有字符串的末尾:

$str1 = "hello";
$str1 .= " world";
// $str1 现在为 "hello world"

另外,在 PHP 5.6+ 版本中,还可以使用双引号字符串插值来拼接字符串。例如:

$name = "John";
echo "My name is $name"; // 输出 "My name is John"

上述例子中,在字符串中使用变量名 $name 就会自动替换成变量的值。这种方式更简便快捷,使用起来更加方便。

2.8 全局变量和局部变量

在 PHP 中,全局变量和局部变量的使用和其他编程语言类似。

全局变量是定义在函数外部的变量,可以在脚本中的任何位置访问和使用。例如:

$global_var = "Hello";

function print_global_var(){
    global $global_var;  // 必须使用 global 关键字声明外部变量
    echo $global_var;
}

print_global_var(); // 输出 "Hello"

需要注意的是,在函数中使用全局变量时,必须通过 global 关键字声明变量,否则该变量会被认为是局部变量。

局部变量是定义在函数内部的变量,只能在该函数范围内访问和使用。例如:

function print_local_var(){
    $local_var = "World";
    echo $local_var;
}

print_local_var(); // 输出 "World"

echo $local_var; // 报错:Undefined variable: local_var

需要注意的是,局部变量的作用域只限于该函数,函数执行结束后,局部变量的值就会被销毁。而全局变量的作用域则为整个脚本,除非显式销毁变量或脚本执行结束,否则全局变量的值会一直存在。

因此,在编写 PHP 代码时,应谨慎使用全局变量,以防止意外修改变量值或引起其他问题。而对于需要在多个函数或页面中使用的变量,可以考虑使用常量或 session 变量来实现。

2.9 关联数组

PHP的关联数组是一种特殊的数组类型,其中每个元素都有一个关联的键来标识它。在关联数组中,键可以是字符串或整数,而不仅仅是数字。这使得关联数组更灵活,因为您可以使用具有意义的键来组织和访问数据。

创建关联数组时,需要使用array()函数,并将每个键和对应的值作为参数传递。下面是一个示例:

$person = array("name" => "John", "age" => 30, "city" => "New York");

在上面的示例中,我们创建了一个名为$person的关联数组,其中包含三个元素:name、age和city。每个元素都有一个对应的键,分别为"name"、“age"和"city”。

要访问关联数组中的元素,可以使用其键作为索引。例如,要输出$person数组中的名称,可以使用以下代码:

echo $person["name"];

这将输出"John",因为"name"键对应的值是"John"。

您还可以使用foreach循环遍历关联数组中的所有元素。例如,以下代码将遍历$person数组中的所有元素,并输出它们的键和值:

foreach ($person as $key => $value) {
    echo $key . ": " . $value . "<br>";
}

这将输出以下内容:

name: John
age: 30
city: New York

总的来说,关联数组是PHP中一种非常有用的数据类型,可以让您使用有意义的键来组织和访问数据。

2.10 unset()

PHP中的unset()函数用于销毁指定变量,使其不再存在于内存中。当使用unset()函数删除一个变量时,PHP会回收变量的内存空间,从而释放内存并提高程序的性能。

此外,unset()函数不仅可以用于删除变量,还可以用于删除数组中的元素,例如:

$fruit = array('apple', 'orange', 'banana');

unset($fruit[1]); // 删除数组中的第二个元素('orange')

print_r($fruit); // 输出:Array([0] => apple [2] => banana)

需要注意的是,unset()函数只能删除变量本身,而不能删除变量指向的值。如果想要清空变量的值,可以使用赋值为null的方式,例如:

$name = 'John';
$name = null; // 清空$name变量的值

2.11 使用字符串函数获取文件的扩展名

<?php
$file_name = "apple.jpg";
$file_array = explode(".", $file_name);
$file_ext = end($file_array);
echo $file_ext;
// 运行结果:jpg

第3章

  1. mysqli_query()函数用于执行MySQL操作语句
  2. 在更新数据时,如果没有指定where条件,则所有记录行都将被更新
  3. 可以在like之前使用not关键字,用来查询与指定通配符不匹配的记录
  4. mysql_query()函数执行“use 数据库名”这条SQL语句可以实现数据库的选择
  5. limit的第一个参数表示的是每次读取的起始位置
  6. 操作MySQL数据库的PDO扩展的文件名是extension=php_pdo_mysql.dll
  7. 使用like模糊搜索时,“%Y%”这样的条件将匹配包含字符“Y”的字符串
  8. 在MySQL中,数据表中的数据条目是从0开始计算的
  9. 在使用insert语句添加数据时,数据的值的顺序需要与数据表中的字段顺序保持一致
  10. 使用limit子句可以实现分页获取数据,它的第一个参数是起始位置
  11. mysql_fetch_assoc()函数从结果集中取得一行作为关联数组
  12. PHP操作MySQL数据库时,需要使用mysqli_query()函数执行SQL语句
  13. select * from itcast_info limit 0,100可以查询出前100条数据
  14. mysqli扩展在默认情况下已经安装好了,在php.ini中开启该扩展的配置项是extension=php_mysqli.dll
  15. PRIMARY KEY可以唯一标识表中的某一条记录
  16. 在MySQL中更新数据时,一条SQL语句可以更新多行数据
  17. mysql_query()函数在执行查询语句时,返回的数据需要使用类似mysqli_fetch_array()等函数获取,并处理后输出
  18. mysql_query()仅对SELECT、SHOW、EXPLAIN或DESCRIBE语句返回一个资源标识符,如果查询执行不正确则返回FALSE
  19. 使用mysqli扩展连接到数据库需要调用mysqli_connect()函数,并判断连接是否成功
  20. SQL语句可以使用ORDER BY关键字实现排序,DESC表示降序排序,ASC表示升序排序
  21. 使用SQL语句可以创建数据表,指定数据表的字段名、类型、主键、自增等信息
  22. 在选择数据库前必须指定字符集,可以使用SET NAMES关键字指定
  23. 使用limit子句可以实现分页获取数据,包括起始位置和每页显示的记录数

以上是PHP操作MySQL数据库的主要知识点总结。在实际应用中,需要根据不同的需求,灵活运用这些知识点进行开发。

第4章

  1. output_buffering = 4096表示输出缓冲区大小为4096字节
  2. 使用session_start()函数开启一个会话,并可以在$_SESSION超全局变量中保存会话数据
  3. 超全局变量$_GET$_POST$_SERVER$_COOKIE$_SESSION$_REQUEST等是PHP预定义好的变量,可以在脚本的任何位置使用
  4. session会话ID在客户端和服务器端都保存,用于区别不同的用户
  5. 使用setcookie()函数创建Cookie,可以设置Cookie的名称、值、过期时间、作用域等参数
  6. JavaScript表单验证只能做简单的验证,在服务器端进行表单验证可以保证系统的安全稳定
  7. Session是一种服务器端的技术,它的生命周期从用户访问页面开始,直到关闭浏览器结束
  8. Content-Type字段用于表示实体内容的MIME类型
  9. 可以通过setcookie()函数为保存到Cookie中的SessionID设置HttpOnly属性,使其只能通过HTTP协议访问
  10. 在使用表单时,相同name的单选按钮如果都没有选中,则不会提交该数据
  11. HTTP协议是一种明文传输协议,对于安全性敏感的网站,应使用HTTPS协议进行加密传输
  12. 使用setcookie()函数创建Cookie时必须在其他信息输出前调用,否则会导致程序出错
  13. 可以通过trim()、intval()、strip_tags()、htmlspecialchars()等函数对用户输入数据进行过滤和转换
  14. 可以使用preg_match()函数进行正则表达式匹配
  15. 使用HTTP协议发送响应消息时,可以在响应头中增加Set-Cookie响应头字段来设置Cookie
  16. HTTP协议中常见的状态码有404、200、403、500等
  17. Web服务器可以为每个用户的浏览器创建一个供其独享的Session文件
  18. Session数据保存在服务器端,但是sessionid是保存在客户端的,因此需要通过Cookie来进行传递
  19. 可以使用$_SESSION超全局变量从Session中读取数据
  20. 可以使用HTTP协议中的GET和POST方法来向服务器提交数据,GET方法将数据置于URL中,而POST方法将数据置于请求体中

以上是PHP会话管理和HTTP协议相关的主要知识点总结,对于实际开发中的应用,需要根据不同的需求灵活运用这些知识点进行开发和维护。

第5章

  1. 图像处理函数:
  • imagesetpixel(): 用于在图像中绘制一个像素点。
  • imageline(): 用于在图像中绘制一条直线。
  • imagerectangle(): 用于在图像中绘制一个矩形。
  • imageellipse(): 用于在图像中绘制一个椭圆形。
  • imagecreatetruecolor(): 用于创建一个真彩色图像,支持各种颜色。
  • getimagesize(): 用于获取图像的信息,包括宽度、高度和类型等。
  1. 文件操作函数:
  • basename(): 用于获取路径中的文件名部分。
  • pathinfo(): 用于返回文件路径的信息,包括目录名、文件名、文件基本名和扩展名。
  • copy(): 用于复制文件。
  • file(): 将整个文件读入数组中,数组中每个元素为一行数据。
  • fgets(): 用于在打开文件时获取一行数据。
  • file_get_contents(): 将文件全部内容读取到一个字符串中。
  • fgetc(): 在打开文件时获取一个字符。
  • fopen(): 用于打开文件。
  • fclose(): 用于关闭文件。
  • fread(): 用于读取文件内容。
  • fwrite(): 用于写入文件内容。
  • filesize(): 用于获取文件大小。
  • unlink(): 用于删除文件。
  • rmdir(): 用于删除目录,但只能删除空目录。
  • dirname(): 用于返回路径中的目录部分。
  • is_file(): 用于判断文件是否存在。
  • is_dir(): 用于判断目录是否存在。
  • scandir(): 用于获取目录中的文件列表。
  • mkdir(): 用于创建目录。
  1. 文件上传:
  • $_FILES数组:用于获取上传文件的相关信息。
  • move_uploaded_file()函数:用于将上传文件移动到指定位置。
  • enctype属性值设置为multipart/form-data:用于实现文件上传。
  1. HTTP请求方法:
  • GET:用于从服务器获取数据。
  • POST:用于向服务器提交数据。
  1. 超全局数组:
  • $_GET:用于获取由HTTP_GET方式提交至PHP脚本的变量。
  • $_POST:用于获取由HTTP_POST方式提交至PHP脚本的变量。
  • $_REQUEST:用于获取由GET、POST和COOKIE方式提交至PHP脚本的变量。
  • $_FILES:用于获取上传文件的相关信息。
  1. 图片水印:
  • imagecopy(): 用于将一个图像复制到另一个图像上。
  • imagecopymerge(): 用于将一个图像复制到另一个图像上并设置透明度。
  1. 文字水印:
  • imagefttext(): 使用FreeType 2字体将文本写入图像。
  • imagettftext(): 用TrueType字体向图像写入文本。
  1. 文件下载:
  • header()函数:用于设置HTTP响应头。
  • Content-type:用于指定下载文件的MIME类型。
  1. Session技术:
  • 用于验证码的验证。
  1. 文件指针指向:
  • 打开文件时根据打开模式和参数决定。
  1. 文件打开模式:
  • r:只读方式打开,将文件指针指向文件头。
  • r+ :读写方式打开,将文件指针指向文件头。
  • w:写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
  • w+ :读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
  • a:写入方式打开,将文件指针指向文件尾。如果文件不存在则尝试创建之。
  • a+ :读写方式打开,将文件指针指向文件尾。如果文件不存在则尝试创建之。

第6章

回答每一个问题,如下:

  1. 在PHP的类中,提供了三个访问修饰符 公有 public 、保护protected 、私有private。 答案:对。

  2. 在类中可以使用 self 关键字表示当前的对象。 答案:错。self是在类内调用静态成员的方式。

  3. 在PHP类中可以使用final关键字禁止继承和重写。 答案:对。

  4. 类的继承是指在一个现有类的基础上去构建一个新类,构建出的新类称为子类,现有类称为父类。 答案:对。

  5. 在PHP中,可以通过 abstract 关键字声明抽象类, 抽象类中可以有非抽象方法、成员属性和常量。 答案:对。

  6. spl_autoload_register()可以实现类库的自动加载。 答案:对。

  7. 保证一个类仅有一个实例,这句话描述的是单例模式。 答案:对。

  8. 在PHP语言中,抽象类不能被实例化。 答案:对。

  9. 在子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数,而不仅仅是相同的方法名,如果想要调用父类中被重写的方法,就需要使用parent关键字, parent关键字用于访问父类的成员。由于parent关键字引用的是一个类而不是一个方法,因此需要使用范围解析操作符(::)。子类方法重写父类方法时,访问权限不能小于父类方法的访问权限。 答案:对。

  10. 在创建对象时,如果不需要传递参数,则可以省略类名后面的括号。 答案:对。

  11. 面向对象的三大特征是封装、多态、继承,其中继承的实现非常简单,在编写一个类文件的时候使用extends关键字来继承另一个类即可,可以通过重写来实现多态效果。 答案:对。

  12. 在类中声明的成员变量被称为成员属性,声明的方法被称为成员方法。 答案:对。

  13. 接口不能直接被实例化,即不能使用new关键字创建接口对象。PHP提供implements关键字用于实现接口。 答案:对。

  14. 如果抽象类中所有的成员方法都是抽象的,则可以将这个类定义为接口,其语法格式如下: interface 接口名{ // 成员 常量 // 抽象方法 } 其中,关键字interface用来定义接口。接口中的成员属性只能是使用const修饰的常量,不能是变量,而抽象类中可以定义成员变量。接口中所有的方法都是抽象方法,因此方法名前就不需要使用abstract关键字修饰了。 答案:对。

  15. 这个符号“::”被称为静态访问符,访问静态成员都需要通过这个操作符来完成。 答案:对。

  16. self是在类内调用静态成员的方式,而类名在类内和类外都可以调用。 答案:错。类名在类外可以调用,在类内需要使用self。

  17. 如果一个类继承了某个抽象类,则它必须实现该类的所有抽象方法。 答案:对。

  18. 抽象类不能直接被实例化,即不能使用new关键字创建抽象类对象,必须先继承该抽象类,然后再实例化子类。抽象类中至少要包含一个抽象方法。如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现,即只有声明没有方法体,不能被调用。 答案:对。

  19. 子类在继承父类时,会继承父类的所有公共成员和受保护的成员,而不会继承父类的私有成员。 答案:对。

  20. 类中定义的__construct()表示构造方法,它会在类实例化对象时自动调用,用于初始化类中的成员。在一个对象被销毁时,被自动调用的方法是析构方法__destruct()。 答案:对。

  21. 类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。 答案:对。

  22. 在类中声明静态成员的关键字是static。

  23. 在PHP中,可以创建对象的关键字是 new。

  24. 在类中,属性是通过成员变量实现的,而行为是通过成员函数(又称为方法)实现的。定义类的语法格式:类名【成员变量;成员方法;】。

  25. 对象复制可以通过clone关键字来完成。

第7章

PDO (PHP Data Object) 是一种用于访问数据库的扩展,可以统一不同数据库的访问接口,实现代码的可移植性。其核心类是PDO类,使用方式分为面向对象和面向过程两种语法形式。

PDO的数据源(DSN)包括PDO驱动名、主机名、端口号、数据库名称等信息。PDO处理结果集的方法包括fetch()、fetchColumn()和fetchAll(),其中fetch()方法用于获取下一行数据,需与while配合使用以获取所有数据;fetchColumn()方法以字符串方式返回指定列的值;fetchAll()方法以数组形式返回所有行。

PDO执行SQL语句有三种方法:exec()方法主要用于没有结果集合返回的操作,如INSERT、UPDATE、DELETE等操作;query()方法主要用于有记录结果返回的操作,特别是SELECT操作;预处理语句可以解决重复分析和编译的问题,提高运行速度。

PDO错误处理模式包括ERRMODE_ERROR、ERRMODE_SILENT、ERRMODE_WARNING和ERRMODE_EXCEPTION;errorCode()和errorInfo()方法用于检查语句和数据库对象是否有错误。在使用PDO的预处理语句时,bindParam()方法可以将变量参数绑定到占位符上,execute()方法用于执行预处理语句。

PDO的缺点是维护困难和可移植性差,但其解决了不同数据库扩展的应用程序接口互不兼容的问题。

重点知识点:PDO的数据源(DSN)、处理结果集的方法、预处理语句、执行SQL语句的三种方法、错误处理模式。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

okfang616

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值