PHP大纲

1. PHP简介

1.1 PHP的定义

  • PHP的定义:PHP是一种开源的服务器端脚本语言,用于开发Web应用程序。它可以嵌入HTML中,也可以与各种数据库配合使用,如MySQL等。PHP最初是由Rasmus Lerdorf开发的,现在由The PHP Group维护。

1.2 PHP的历史

  • PHP的历史:

PHP最初是由Rasmus Lerdorf于1995年创建的,当时它只是一个简单的用于跟踪访问个人简历的工具。随着时间的推移,它逐渐演变成了一个用于创建动态Web页面的脚本语言。PHP的发展得益于其开源性质,使得开发者可以方便地共享和贡献代码,从而不断完善和发展。现在,PHP已经成为了Web开发中最受欢迎的语言之一,被广泛应用于各种网站和应用程序的开发中。

1.3 PHP的特点- PHP的特点:

  • 开源免费
  • 跨平台
  • 面向对象编程(OOP)
  • 支持多种数据库
  • 安全性高
  • 执行效率高
  • 可扩展性强
  • 社区活跃,生态丰富

2. PHP基础语法

2.1 变量

  • 变量赋值及使用示例:
$name = "Tom"; 
$age = 18; 
$isMale = true;
$salary = 1200.50; 
echo "姓名:" . $name . "<br>"; 
echo "年龄:" . $age . "<br>"; 
echo "性别:" . ($isMale ? "男" : "女") . "<br>"; 
echo "薪水:" . $salary . "<br>"; 
  • 变量作用域示例:
$globalVar = "global"; 
function test() {
  $localVar = "local";     
  global $globalVar;     
  echo "函数内部局部变量:" . $localVar . "<br>";     
  echo "函数内部全局变量:" . $globalVar . "<br>"; 
} 
test(); 
echo "函数外部全局变量:" . $globalVar . "<br>"; 
echo "函数外部局部变量:" . $localVar . "<br>"; // 报错:Notice: Undefined variable 
  • 变量类型转换示例:
$numStr = "123"; 
$num = (int)$numStr; 
$strNum = (string)$num; 
echo "字符串转整型:" . $num . "<br>"; 
echo "整型转字符串:" . $strNum . "<br>"; 
  • 变量引用示例:
$a = 10; 
$b = &$a; 
$b = 20; 
echo "变量a的值:" . $a . "<br>"; 
echo "变量b的值:" . $b . "<br>"; 
  • 常量定义及使用示例:
define("PI", 3.14); 
echo "圆周率:" . PI . "<br>"; 

2.2 常量

  • PHP常量是一个简单值的标识符。常量一旦被定义,在脚本的其他任何地方都不能被改变或者重新定义。
// 定义常量 
define("CONSTANT_NAME", "Hello world."); 
// 使用常量 
echo CONSTANT_NAME; 
  • 魔术常量是PHP预定义的特殊常量,它们有特殊的含义,不能被重新定义。常用的魔术常量有:
    • __LINE__:当前行号
    • __FILE__:当前文件名
    • __DIR__:当前文件所在的目录
    • __FUNCTION__:当前函数名
    • __CLASS__:当前类名
    • __TRAIT__:当前trait名
    • __METHOD__:当前方法名
    • __NAMESPACE__:当前命名空间名
  • 预定义常量是PHP提供的一些常量,可以直接在代码中使用。常用的预定义常量有:
    • PHP_VERSION:当前PHP版本号
    • PHP_OS:当前操作系统类型
    • PHP_EOL:当前系统的换行符
    • PHP_INT_MAX:整型的最大值
    • PHP_INT_MIN:整型的最小值
  • 魔术方法是一种特殊的方法,它们在特定的情况下自动调用。常用的魔术方法有:
    • __construct():对象被创建时自动调用的方法
    • __destruct():对象被销毁时自动调用的方法
    • __get():获取一个不存在的属性时自动调用的方法
    • __set():设置一个不存在的属性时自动调用的方法
    • __call():调用一个不存在的方法时自动调用的方法
    • __toString():把对象转换为字符串时自动调用的方法

2.3 运算符

  • 算术运算符:
$a = 10; $b = 3; 
echo $a + $b; // 输出13 

echo $a - $b; // 输出7 
echo $a * $b; // 输出30
echo $a / $b; // 输出3.3333333333333
echo $a % $b; // 输出1 
  • 赋值运算符:
$a = 10; 
$b = 3; 
$a += $b; // $a = $a + $b; 
echo $a; // 输出13 
  • 比较运算符:
$a = 10; 
$b = 3; 
var_dump($a > $b); // 输出bool(true) 
var_dump($a < $b); // 输出bool(false) 
var_dump($a == $b); // 输出bool(false) 
var_dump($a != $b); // 输出bool(true) 
  • 逻辑运算符:
$a = true; 
$b = false; 
var_dump($a && $b); // 输出bool(false) 
var_dump($a || $b); // 输出bool(true) 
var_dump(!$a); // 输出bool(false) 
  • 位运算符:
$a = 1; 
$b = 2; 
var_dump($a & $b); // 输出int(0) 
var_dump($a | $b); // 输出int(3) 
var_dump($a ^ $b); // 输出int(3) 
var_dump(~$a); // 输出int(-2) 
var_dump($a << 1); // 输出int(2) 
var_dump($a >> 1); // 输出int(0) 
  • 三元运算符:
$a = 10; 
$b = 3; 
echo ($a > $b) ? "a大于b" : "a小于等于b"; // 输出a大于b 
  • 表格:

运算符

描述

示例

+

加法

$a + $b

-

减法

$a - $b

*

乘法

$a * $b

/

除法

$a / $b

%

取模

$a % $b

2.4 控制结构

  • if语句
$a = 10; 
if ($a > 5) {
  echo "a大于5"; 
} 
  • for循环
for ($i = 0; $i < 10; $i++) {
  echo $i; 
} 
  • foreach循环
$arr = array(1, 2, 3); 
foreach ($arr as $value) {
  echo $value; 
} 
  • while循环
$i = 0; 
while ($i < 10) {
  echo $i;     
  $i++; 
} 
  • do-while循环
$i = 0; 
do {     
  echo $i;     
  $i++; 
} while ($i < 10); 
  • switch语句
$a = 1; switch ($a) {     
  case 1:         
    echo "a等于1";         
    break;     
  case 2:                           
    echo "a等于2";         
    break;     
  default:         
  	echo "a不等于1也不等于2"; 
} 
  • 三元运算符
$a = 10; 
$b = $a > 5 ? "a大于5" : "a小于等于5"; 
echo $b; 
  • 表格语法

控制结构

用法示例

if语句

if ($a > 5) {
echo “a大于5”;
}

for循环

for ($i = 0; $i < 10; $i++) {
echo $i;
}

foreach循环

$arr = array(1, 2, 3);
foreach ($arr as $value) {
echo $value;
}

while循环

$i = 0;
while ($i < 10) {
echo $i;
$i++;
}

do-while循环

$i = 0;
do {
echo $i;
$i++;
} while ($i < 10);

switch语句

$a = 1;
switch ($a) {
case 1:
echo “a等于1”;
break;
case 2:
echo “a等于2”;
break;
default:
echo “a不等于1也不等于2”;
}

三元运算符

$a = 10;
$b = $a > 5 ? “a大于5” : “a小于等于5”;
echo $b;

2.5 函数- 函数

  • 示例1:定义一个简单的函数
function sayHello() {
  echo "Hello World!"; 
} 
sayHello(); // 输出 Hello World! 
  • 示例2:带参数的函数
function sayHelloTo($name) {
  echo "Hello " . $name . "!"; 
} 
sayHelloTo("Alice"); // 输出 Hello Alice! 
  • 示例3:带默认参数的函数
function sayHelloWithDefault($name = "World") {
  echo "Hello " . $name . "!"; 
} 
sayHelloWithDefault(); // 输出 Hello World! 
sayHelloWithDefault("Bob"); // 输出 Hello Bob! 
  • 示例4:返回值的函数
function add($a, $b) {
  return $a + $b; 
} 
$result = add(3, 4); 
echo $result; // 输出 7 
  • 示例5:使用可变参数的函数
function sum(...$numbers) {     
  $result = 0;     
  foreach ($numbers as $n) {
    $result += $n;     
  }     
  return $result; 
} 
echo sum(1, 2, 3); // 输出 6 
echo sum(1, 2, 3, 4, 5); // 输出 15 

3. PHP高级特性

3.1 面向对象编程

  • 封装:将数据和操作数据的方法封装在一起,避免外部直接访问和修改数据,提高安全性和可维护性。
<?php class Person {     
  private $name;     
	private $age;     
  public function __construct($name, $age) {
    $this->name = $name;        
    $this->age = $age;     
  }     
  public function getName() {
    return $this->name;     
  }     
  public function getAge() {
    return $this->age;     
  }     
  public function setName($name) {
    $this->name = $name;     
  }     
  public function setAge($age) {
    $this->age = $age;     
  } 
} 
$person = new Person('Tom', 18); 
echo $person->getName(); // 输出:Tom 
echo $person->getAge(); // 输出:18 
$person->setName('Jerry'); 
$person->setAge(20); 
echo $person->getName(); // 输出:Jerry 
echo $person->getAge(); // 输出:20 
  • 继承:子类可以继承父类的属性和方法,并且可以在此基础上进行扩展和修改。
<?php 
class Animal {     
  protected $name;     
  public function __construct($name) {
    $this->name = $name;     
  }     
  public function getName() {
    return $this->name;     
  }     
  public function run() {
    echo $this->name . ' is running.';     
  } 
} 
class Dog extends Animal {
  public function bark() 
  {         
    echo $this->name . ' is barking.';     
  } 
} 
$dog = new Dog('旺财'); 
echo $dog->getName(); // 输出:旺财 
$dog->run(); // 输出:旺财 is running. 
$dog->bark(); // 输出:旺财 is barking. 
  • 多态:同一种方法在不同的对象上可以有不同的表现形式。
<?php 
interface Shape {     
  public function area(); 
} 
class Rectangle implements Shape {
  private $width;     
  private $height;     
  public function __construct($width, $height) {
    $this->width = $width;         
    $this->height = $height;     
  }     
  public function area() {
    return $this->width * $this->height;     
  } 
} 
class Circle implements Shape {
  private $radius;     
  public function __construct($radius) {
    $this->radius = $radius;     
  }     
  public function area() {
    return pi() * $this->radius * $this->radius;     
  } 
} 
function printArea(Shape $shape) {
  echo $shape->area(); 
} 
$rectangle = new Rectangle(5, 10); 
$circle = new Circle(5); 

printArea($rectangle); // 输出:50 
printArea($circle); // 输出:78.539816339745 
  • 接口:规定了类必须实现哪些方法,但是不需要规定如何实现。
<?php 
  interface Animal {     
  public function eat();     
  public function sleep(); 
} 
class Dog implements Animal {    
  public function eat() {         
    echo 'Dog is eating.';     
  }     
  public function sleep() {
    echo 'Dog is sleeping.';     
  } 
} 
class Cat implements Animal {
  public function eat() {
    echo 'Cat is eating.';     
  }    
  public function sleep() {
    echo 'Cat is sleeping.';     
  } 
} 
$dog = new Dog(); 
$cat = new Cat(); 
                                                  
$dog->eat(); // 输出:Dog is eating. 
$dog->sleep(); // 输出:Dog is sleeping. 
$cat->eat(); // 输出:Cat is eating. 
$cat->sleep(); // 输出:Cat is sleeping. 

3.2 异常处理

  • 异常处理基本语法
try {
  // 可能抛出异常的代码 
} catch (Exception $e) {
  // 捕获异常并处理 
} 
  • 自定义异常
class CustomException extends Exception {
  public function errorMessage() {
    // 自定义异常处理信息     
  } 
} 
  • 抛出异常
if ($someError) {
  throw new CustomException('Some error message'); 
} 
  • 处理未捕获的异常
set_exception_handler(function($e) {
  // 处理未捕获的异常 
}); 
  • 使用finally语句块
try {     
  // 可能抛出异常的代码 
} catch (Exception $e) {     
     // 捕获异常并处理 
} finally { 
  // 无论是否有异常都会执行的代码 
} 

3.3 命名空间

  • 命名空间是PHP5引入的一个新特性,用于解决命名冲突的问题。命名空间可以将函数、类、常量等组织在一起,避免与其他同名元素发生冲突。
  • 命名空间的声明方式:
namespace MyNamespace; 
  • 使用命名空间定义的类可以通过完整的命名空间路径进行访问,例如:
$obj = new MyNamespace\MyClass(); 
  • 可以使用use关键字导入命名空间,使得代码更加简洁。例如:
use MyNamespace\MyClass; 
$obj = new MyClass(); 
  • 命名空间也可以嵌套使用,例如:
namespace MyNamespace\SubNamespace; 
class MyClass {} 
  • 使用命名空间的好处是可以更好地组织代码,防止命名冲突,提高代码的可读性和可维护性。

3.4 闭包

  • 闭包基本定义和使用示例
$greet = function($name) {     
  printf("Hello %s\r\n", $name); 
}; 
$greet('World'); 
$greet('PHP'); 
  • 闭包使用外部变量示例
function getCounter() {     
  $i = 0;     
  return function() use (&$i) {         
    return ++$i;     
  }; 
} 
$counter = getCounter(); 
echo $counter(); // 输出 1 echo $counter(); // 输出 2 echo $counter(); // 输出 3 
  • 闭包作为函数参数示例
function add($a, $b, $callback) {     
  $result = $a + $b;     
  $callback($result); 
} 
add(1, 2, function($result) {     
  echo $result; // 输出 3 
}); 

3.5 Trait- Trait是PHP5.4引入的一种代码复用机制,类似于Java中的接口和抽象类的结合体,可以在不同的类中复用相同的代码块。

  • Trait是一种可重用的代码块,可以被多个类使用,避免了多重继承的问题。
  • Trait可以像类一样定义属性和方法,但不能被直接实例化,只能被其他类使用。
  • Trait中定义的属性和方法可以被使用它的类中的其他方法调用,就像这些方法是类中的原始定义一样。
  • Trait可以使用“as”关键字进行方法重命名和冲突解决。
  • Trait可以使用“insteadof”关键字来解决方法冲突,也可以使用“as”关键字来进行方法重命名。
  • Trait可以使用“use”关键字来在类中引入Trait,一个类可以引入多个Trait。
  • Trait中的方法可以被定义为抽象方法,需要在使用Trait的类中实现。

4. PHP与Web开发

4.1 PHP与HTTP协议

  • PHP与HTTP协议PHP作为一种Web开发语言,与HTTP协议密切相关。以下是PHP与HTTP协议相关的一些实例:
    • 发送HTTP请求并获取响应:
$url = 'http://example.com/api'; 
$data = array('key1' => 'value1', 'key2' => 'value2'); 
$options = array(     
  'http' => array(         
    'header'  => "Content-type: application/x-www-form-urlencoded\r\n",         
    'method'  => 'POST',         'content' => http_build_query($data),     
  ), 
); 
$context  = stream_context_create($options); 
$result = file_get_contents($url, false, $context); 
    • 读取HTTP请求的头部信息:
foreach (getallheaders() as $name => $value) {     
  echo "$name: $value\n"; 
} 
    • 设置HTTP响应头部信息:
header('Content-Type: application/json'); 
header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
    • 重定向HTTP请求:
header('Location: http://example.com/new_page.php'); 
exit; 
    • 使用HTTP认证:
$username = 'myusername'; 
$password = 'mypassword'; 
$context = stream_context_create(array(     
  'http' => array(         
    'header' => "Authorization: Basic " . base64_encode("$username:$password")     
  ) 
)); 
$result = file_get_contents('http://example.com/api', false, $context); 

4.2 PHP与数据库

  • PHP与数据库
    • PHP连接MySQL数据库的例子:
<?php 
  $servername = "localhost"; 
  $username = "username"; 
  $password = "password"; 
  $dbname = "myDB"; 
  // 创建连接 
  $conn = new mysqli($servername, $username, $password, $dbname); 
  // 检测连接 
  if ($conn->connect_error) {     
    die("连接失败: " . $conn->connect_error); 
  } 
  echo "连接成功"; 
?> 
    • PHP连接MongoDB数据库的例子:
<?php 
	$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017"); 
	$bulk = new MongoDB\Driver\BulkWrite; 
	$doc = ['_id' => new MongoDB\BSON\ObjectID, 'name' => 'John Doe', 'age' => 42]; 
	$_id = $bulk->insert($doc); 
	$manager->executeBulkWrite('testdb.testcoll', $bulk); 
	echo $_id; 
?> 
    • PHP连接Redis数据库的例子:
<?php 
	$redis = new Redis(); 
	$redis->connect('127.0.0.1', 6379); 
	$redis->set('test', 'Hello World'); 
	echo $redis->get('test'); 
?> 

4.3 PHP与Session和Cookie

  • Session是指跨请求(request)的数据存储机制,用于在同一个用户的不同请求间共享数据,常用于用户登录状态、购物车等功能的实现。
  • Cookie是指在客户端(通常是浏览器)存储数据的机制,可以在请求时将数据发送给服务器,常用于保存用户的偏好设置、语言选择等信息。
  • 在PHP中,可以使用$_SESSION和$_COOKIE超全局变量来操作Session和Cookie:
// 设置Session session_start(); 
$_SESSION['username'] = 'John'; 
// 获取Session 
session_start(); 
echo $_SESSION['username']; 
// 设置Cookie 
setcookie('username', 'John', time()+3600); 
// 获取Cookie 
echo $_COOKIE['username']; 

4.4 PHP与模板引擎- PHP与模板引擎:

  • 实例1:使用Smarty模板引擎渲染页面
  • 实例2:使用Twig模板引擎渲染页面
  • 实例3:使用Blade模板引擎渲染页面

5. PHP的应用

5.1 Web应用开发

  • Web应用开发
    1. 利用PHP开发简单的网站
<?php 
        echo "Hello, World!"; 
?> 
    1. 利用PHP连接MySQL数据库
<?php 
  $servername = "localhost"; 
  $username = "username";
  $password = "password"; 
  // 创建连接 
  $conn = new mysqli($servername, $username, $password); 
  // 检测连接 
  if ($conn->connect_error) {     
    die("Connection failed: " . $conn->connect_error); 
  } 
  echo "Connected successfully"; 
?> 
    1. 利用PHP实现表单提交
<?php 
  if ($_SERVER["REQUEST_METHOD"] == "POST") {     
  // 收集表单数据     
  $name = $_POST["name"];     
$email = $_POST["email"];     
$message = $_POST["message"];     
// 处理表单数据     
// ...     
// 返回结果     
echo "Thank you for your message!"; 
} 
?> 
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
  Name: <input type="text" name="name"><br>     
  E-mail: <input type="text" name="email"><br>     
  Message: <textarea name="message"></textarea><br>     
  <input type="submit" name="submit" value="Submit"> 
</form> 

5.2 命令行应用开发

  • 使用Symfony Console组件开发命令行应用
  • 使用PHP内置的argv和argc全局变量获取命令行参数
  • 使用PHP内置的exec函数执行外部命令
  • 使用PHP内置的pcntl扩展实现进程控制
  • 使用PHP内置的posix扩展实现进程间通信

表格:

命令

描述

php mycommand.php

执行自定义命令

php mycommand.php -h

查看帮助信息

php mycommand.php -v

查看版本信息

5.3 数据处理和分析

  • 数据处理:使用 PHP 处理各种数据类型,包括字符串、数字、数组、对象等等。
  • 数据库操作:使用 PHP 连接数据库,进行增删改查等操作。
  • 文件操作:使用 PHP 对文件进行读写、上传下载等操作。
  • 图像处理:使用 PHP 处理图像,包括缩放、裁剪、水印等操作。
  • 表格处理:使用 PHP 处理表格数据,包括导入、导出、排序、筛选等操作。

5.4 游戏开发- 游戏开发

  • 实例1:使用PHP开发简单的猜数字游戏
  • 实例2:使用PHP和JavaScript开发简单的扫雷游戏
  • 实例3:使用PHP和MySQL开发简单的卡牌游戏

6. PHP的发展趋势

6.1 PHP的生态系统

  • PHP的生态系统
    • Composer
      • Composer是PHP的依赖管理器,可以方便地管理项目中所需要的第三方库及其版本。
    • Laravel框架
      • Laravel是一个流行的PHP Web应用程序框架,提供了许多开箱即用的功能,如路由、ORM、模板引擎等。
    • Symfony框架
      • Symfony是另一个流行的PHP框架,也提供了许多组件,如表单、安全性、缓存等。
    • PHPUnit
      • PHPUnit是PHP的一个测试框架,可以方便地编写和运行单元测试。

6.2 PHP的框架

  • Laravel框架:基于MVC模式,具有良好的文档和社区支持,是目前最流行的PHP框架之一。
  • Symfony框架:同样基于MVC模式,具有高度的可定制性和可扩展性,适合大型项目的开发。
  • CodeIgniter框架:轻量级框架,易于上手和学习,适合小型项目的开发。
  • Yii框架:高性能框架,具有强大的缓存和安全性能,适合大型高并发项目的开发。
  • Phalcon框架:C扩展实现的框架,速度极快,适合需要高性能的项目开发。
  • CakePHP框架:老牌框架,具有丰富的工具和插件,适合中小型项目的开发。

6.3 PHP的性能优化

  • 使用缓存提高性能,如使用Memcached、Redis等内存缓存技术。
  • 使用PHP加速器,如Zend OPCache、APC等。
  • 优化数据库查询,如使用索引、避免全表扫描等。
  • 优化代码逻辑,如减少循环嵌套、避免重复代码等。
  • 使用异步编程,如使用Swoole扩展等。
  • 使用多线程编程,如使用PCNTL扩展等。
  • 使用CDN加速,如使用七牛云、阿里云等CDN服务。
  • 使用负载均衡,如使用Nginx、HAProxy等负载均衡软件。
  • 使用分布式架构,如使用微服务架构等。
  • 使用缓存技术,如使用Redis等缓存技术。
  • 使用高性能的Web服务器,如Nginx、Apache等。
  • 使用PHP7及以上版本,因为PHP7相比PHP5性能有了很大提升。

6.4 PHP的安全性

  • PHP的安全性
    • 防止SQL注入攻击的方法,例如使用PDO预处理语句和绑定参数。
    • 防止跨站脚本攻击(XSS)的方法,例如使用htmlspecialchars()函数对输出进行转义,或使用Content Security Policy(CSP)。
    • 防止跨站请求伪造(CSRF)攻击的方法,例如使用随机生成的令牌来验证表单提交。
    • 防止文件上传漏洞的方法,例如限制上传文件的类型和大小,以及在服务器端对上传文件进行验证和过滤。
    • 使用密码哈希来保护用户密码,例如使用PHP内置的password_hash()和password_verify()函数。
    • 使用HTTPS协议来保护数据传输的安全性,例如使用SSL证书和TLS加密。

6.5 PHP的未来发展- PHP 8的发布,包括JIT编译器和其他新功能

  • PHP框架的发展,如Laravel、Symfony、Yii等
  • PHP在云计算和大数据领域的应用
  • PHP在人工智能和机器学习领域的应用
  • PHP在物联网和智能家居领域的应用
  • PHP与其他语言的集成和互操作性
  • PHP的安全性和性能的不断提升
  • PHP社区的发展和贡献,如PHP FIG等

表格:

版本

发布时间

新功能

PHP 8

2020年11月26日

JIT编译器、Union类型、命名参数等

PHP 7.4

2019年11月28日

Typed Properties、Arrow Functions等

PHP 7.3

2018年12月6日

Flexible Heredoc and Nowdoc Syntaxes、JSON_THROW_ON_ERROR等

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

掩月天权

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

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

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

打赏作者

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

抵扣说明:

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

余额充值