PHP(三)——PHP基础知识

PHP基础语法

  • PHP在HTML中的嵌入,允许四种类型

    • <?php?>,只要支持PHP语言的服务器。
    • <??>,需将php.ini文件中的short_open_tag的值设为on
    • <script language ="php"></script>
    • <%%>,在PHP3.0.4及其以上版本,需将php.ini文件中的asp_tags的值设为on
  • 三种注释方法

    1
    2
    3
    4
    5
    6
    //注释内容...
    # 注释内容...
    /*
    多行注释
    注释内容...
    */
  • 输出命令

    • echo:无返回值,不能用于复杂语句。
    • print:有返回值,负责为用户提供反馈,能显示原始字符串和变量,提供与echo相同的功能,且比echo语句更强大。
    • print_r
  • 区分大小写
    • 区分大小写的时候
      • 变量名
      • 常量名,通常写成大写
    • 不区分大小写的时候
      • 函数名、方法名、类名,在调用时尽量使用和定义时相同的名字;
      • 魔术常量不区分大小写,如 LINEFUNCTION等;
      • NULL,TRUE,FLASE不区分;
      • 类型转换时,如(string) 和(STRING)是相同的;

数据类型

数据类型是语言最为基础的部分,它是高级语言抽象出来的一个概念,对于低级语言(机器语言)没有这个概念。对于CPU、内存而言,并没有数据类型之分,数据是没有差别的,高级语言的数据类型为内存中的数据指定了特定的计算方式。

数据类型的产生使得程序的编写更加规范、简洁和灵活。

  • 数据类型:
    • 标量类型:字符串、整型、浮点型和布尔型;
      • boolean(或为bool)
      • integer(或为int)
      • float
      • string
    • 复合类型:数组和对象;
      • array
      • object
    • 特殊类型:资源和NULL
  • 数据类型的方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // 判断数据类型的方法
    is_bool()/is_int()/is_float()/is_string()/is_array()/is_object()
    // 数据类型的转换方式
    // 在变量前加上用括号括起来的数据类型
    (int)/ (bool)/ (float)/ (string)/ (array)/ (object)
    // 使用3个具体类型的转换函数
    intval()/floatval()/strval()
    // 使用函数 
    settype(var, type)
    // 判断变量是否为数字或者数字组成的字符串。
    is_numeric()

    注意:如果给定的数超过了int的范围,将会解释为float,同样,如果执行的运算结果超过int范围,也会返回float。

  • 进制表示

    1
    2
    3
    4
    $a = 123;//十进制数 
    $a = 0123;//八进制数 
    $a = 0x1A;//十六进制数 
    $a = 0b11111111;//二进制数字
  • 字符串中特殊字符

    字符形式 | 功能
    —|—
    \n | 换行且归0
    \br | 换行
    \t | 跳格
    \’ | 单引号
    \” | 双引号
    \$ | $符号
    \r | 回车

  • NULL:表示变量没有值,下列情况变量被认为是NULL:

    • 被赋值为NULL;
    • 尚未被赋值;
    • 被unset()。

      NULL大小写敏感。

变量

  • 定义:变量可以看做是一个容器,先给容器取个名字,然后利用赋值运算符给这个容器装上内容。变量是最常见的数据类型应用形式,主要由变量名、变量值和变量类型三部分组成。

  • 内部实现:PHP中变量名与变量可以简单地对应为zval和zend_value。PHP通过zval结构体来表示一个变量,不同类型的变量值则通过zval内嵌入一个联合体表示,即zend_value。通过zvalzend_value及不同类型的结构实现了PHP基础的数据类型。

    zval的作用:(1)PHP变量;(2)统一函数的参数

  • 变量的命名规则

    • 必须以$符号开头;
    • 第二个字符必须是字母或者下划线;
    • 第二个字符以后的可以是字符数字等的任意组合。
  • 默认变量

变量名意义
PHP_SELF目前执行的文件名称
SERVER_NAME服务器名
SERVER_SOFTWARE服务器软件
DOCUMENT_ROOT文档的根目录
HTTP_USER_AGENT用户相关信息
REMOTE_ADDR远程用户的地址
REMOTE_PORT远程用户的连接端口

在取得变量内容时,以变量名称为数组指针即取得信息。例如SERVER_NAME可以用$_SERVER[‘SERVER_NAME’]取得信息。

常量

  • 定义:常量就是简单值的标识符(名字),代替一个有意义的值。常量如同其名称所暗示的,在程序执行期间该值不能改变。PHP的变量包含两种:一种默认常量,另一种的自定义常量。

  • 默认常量

变量名意义
_FILE_当前正在分析着的脚欧诺个在分析一个被include或require包含的文件,则该常数给出的是include所包含的文件名,而不是当前文件名。
_LINE_当前正在分析着的行在脚本的行数。如果用在一个被include或require的文件中,则该常数给出的是(行)在被include包含的文件中的位置。
PHP_VERSION一个描述当前用着的PHP处理器的版本的字符串
PHP_OS正在运行本PHP处理器的操作系统的名字
TRUE真值
FALSE假值
E_ERROR指示一个不可恢复的语法错误
E_WARNING指示如下一种状态:PHP指导某处出错了,但仍可以继续运行;这些错误能被脚本自身捕获
E_PARSEPHP在脚本的一个语病中被阻塞,不可恢复
E_NOTICE出现了可能是一个错误也可能不是的情况:(这种情况下)运行会继续

这些系统变量可以帮助我们很好地了解系统当前的情况,而且这些常量可以随时调用。

  • 自定义常量:通过define('name',number)函数自定义需要的常量。

运算符及表达式

  • 算术运算符
运算符名称结果
$a + $b加法$a 和 $b 的和
$a - $b减法$a 和 $b 的差
$a * $b乘法$a 和 $b 的积
$a / $b除法$a 除以 $b 的商
$a % $b取模$a 除以 $b 的余数
++$a前加$a 的值加一,然后进行操作
$a++后加$a 的值先进行操作,后加一
–$a前减$a 的值减一,然后进行操作
$a–后减$a 的值先进行操作,后减一
  • 比较运算符
运算符名称结果
$a == $b等于TRUE,如果$a等于$b
$a === $b全等TRUE,如果$a等于$b,并且它们的类型也相同
$a != $b不等TRUE,如果$a不等于$b
$a <> $b不等TRUE,如果$a不等于$b
$a !== $b非全等TRUE,如果$a不等于$b,或者它们的类型不同
$a < $b小于TRUE,如果$a严格小于$b
$a > $b大于TRUE,如果$a严格$b
$a <= $b小于等于TRUE,如果 $a 小于或等于$b
$a >= $b大于等于TRUE,如果 $a 大于或等于$b

另外一个条件运算符是“ ? : ”(或三元)运算符。

  • 逻辑运算符
运算符名称结果
$a and $b逻辑与TRUE,如果 $a 与 $b 都为 TRUE。
$a or $b逻辑或TRUE,如果 $a 或 $b 任一为TRUE。
$a xor $b异或TRUE,如果 $a 和 $b 不同时
! $a逻辑非TRUE,如果 $a 不为 TRUE。
$a && $b逻辑与TRUE,如果 $a 与 $b 都为TRUE。
$a$b逻辑或TRUE,如果 $a 或 $b 任一为TRUE。

其中and与&& 、or与||是同一逻辑运算符的两种写法。

  • 位运算符

    位运算符允许对整型数中指定的位进行置位。如果左右参数都是字符串,则位运算符将操作字符的 ASCII 值。

表达式名称结果
$a & $b按位与将把 $a 和 $b 中都为 1 的位设为 1。
$a$b按位或将把 $a 或者 $b 中为 1 的位设为 1。
$a ^ $b按位异或将把 $a 和 $b 中不同的位设为 1。
~ $a按位非将 $a 中为 0 的位设为 1,反之亦然。
$a << $b左移将 $a 中的位向左移动 $b 次(每一次 移动都表示“乘以 2”)。
$a >> $b右移将 $a 中的位向右移动 $b 次(每一次 移动都表示“除以 2”)。
  • 字符串运算符

    • 连接运算符(“.”),它返回其左右参数连接后的字符串。
    • 连接赋值运算符(“.=”),它将右边参数附加到左边的参数后。
  • 错误抑制操作符

    • 在最常见的数据库连接与文件创建操作或出现除0等异常时,可以用@符号来抑制函数错误信息输出到浏览器端 $a=@(5/0)
    • 外部命令执行 ,使用``来运行外部系统命令,注意不是单引号,是ESC下面那个按键

常用的控制流

if语句

  • 简单的if语句

    1
    2
    3
    if(判断语句) {
    执行语句体;
    }
  • if…else语句

    1
    2
    3
    4
    5
    if(判断语句) {
    执行语句体1;
    } else {
    执行语句体2;
    }
  • 嵌套if…else语句

    1
    2
    3
    4
    5
    6
    if(判断语句) {
    执行语句体1;
    } else if(判断语句2) {
    执行语句体2;
    } else if...
    else...

switch语句(多分支选择性语句)

  • 表达式:

    1
    2
    3
    4
    5
    6
    switch(表达式) {
    case 1: 执行语句体1;break;
    case 2: 执行语句体2;break;
    ...
    default:执行语句体n;break;
    }

    switch后面括号内的表达式,可以是整型表达式或字符型表达式,也已是枚举型数据。表达式的值与case语句后面的值逐个进行匹配,如果匹配得上,就执行case语句后面执行语句体,然后通过break跳出该循环。如果最终没有case语句匹配的表达式,则执行default后面的执行语句体。(default后面可以不加break)。

while循环

  • while语句

    1
    2
    3
    while(判断语句) {
    执行体语句;
    }
  • do…while语句

    1
    2
    3
    do {
    执行体语句;
    }while(判断语句)

for循环

  • for语句

    1
    2
    3
    for(表达式1,表达式2,表达式3) {
    执行语句体;
    }

break、continue语句

  • break:具有结束、中断整个循环的作用,可以被用到for、do…while等循环中,起到结束循环的作用。实际上break语句还可以用来从循环体内跳出循环,即提前结束循环,接着执行其他语句。

  • continue:起到结束本次循环,执行下次循环的作用。

常用函数

输出函数

1
2
3
4
5
6
echo()  //【语言结构】
print() //【语言结构】【有返回值】,若传输失败导致没有输出,它返回false
var_dump()
var_export() //【有返回值,翻译一个合法的PHP代码】
printf() //类似与C语言的形式 printf("my name is %s, age %d", $name, $age);,打印出来
sprintf() //跟printf相似,但不打印,而是返回格式化后的文字,其他的与printf一样

数组函数

  • 排序类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // 按V,按元素值
    sort
    rsort
    asort
    arsort

    //按K,按键值
    ksort
    krsort

    //按字母
    natsort(); //区分大小写的排序
    natcasesort(); //不区分大小写的排序,

    // 回调
    usort($arr,"strnatcmp")//回调类的排序,把$arr数组里的每一个元素丢到strnatcmp()[非自然数排序]处理【返回新的排序数组】

    规律:

    • 没有”k”,排序按照【value】排序,排序有”a”的表示要保留KEY,有”r”的倒序排
    • 有“k”,排序按照【KEY】排序,有”r”的倒序排
    • 有”u”的,表示要丢到回调函数中处理的
  • 键值操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    array_values($arr);//获取$arr中的值重排,去掉下标【返回值新索引数组】
    array_keys($arr[,"str",true])//获取$arr中所有字符是"str"的下标,形成索引数组,true表示区分大小写【返回新索引数组】

    array_search("is",$arr[,true]) //返回值"is"在$arr中的key,找不到返回fales,true表示严格按照类型(8,"8")【返回第一个匹配值】

    in_array("str",$arr);//判断"str"在$arr中是否存在,【返回BOOL】
    is_array($arr);//判断是否是数组【返回BOOL】
    array_key_exists($key,$arr); //查询$arr中是否有$key,【返回BOOL】

    array_flip($arr);// 交换键值,如有重复,后来居上,【返回新数组】
    array_reverse($arr,[true|false]);//数组顺序反转,param2是否保留原来键值【返回新关联/索引数组】

    array_column(array(),'name'[,name_two]) — 返回数组中指定的name列[可选参数,如果有返回name=>name_two的形式]【返回一维数组】
  • 元素个数和唯一性

    1
    2
    3
    4
    array_unique($arr);//去掉$arr中的重复值,重复的保留第一个值,【返回数组,键值保留】

    array_count_values($arr)//统计数组值出现的次数,【返回数组,KEY为原来数组的值,VALUE为统计的次数】
    count($arr[,1])/sizeof();//统计$arr的元素个数,参数"1"表示统计多维数组开启,默认0为关闭【返回统计个数】
  • 回调函数

    1
    2
    3
    4
    array_filter($arr,"function");//把$arr放到函数function中处理,【返回判断为TRUE的数据组成新数组,键值保留】
    array_walk($arr,"function"[,"data"]);//把$arr放到function(&$v,$k,$data)中处理【返回值为bool】
    array_map("function",$arr,$arr2,$arr3,....);//把所有数组返回到回调函数统一处理,【返回数组】
    array_reduce($arr,myfunction[,initial]):把一维数组$arr中的值依次传到自定义函数myfunction($v1,$v2)的v2上,v1为累加值类似于( .= ),[如果有initial,先把其当v1传进去]【返回字符串】
  • 拆分,合并,分解,接合数组

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    array_slice($arr,1[,2]);//在$arr中,从第二个开始取[,返回俩个值]【返回新数组(对原数组无影响),键值保留】
    array_splice($arr,1[,2,"aaa","bb"]);//删除或替换,从$arr第二个开始取,删除或替换2个值【返回值为新数组,拆掉原数组】

    array_combine($arr1,$arr2);//数组$arr1为KEY,$arr2为VALUES结合形成新索引数组【返回索引数组】
    array_merge($arr1,$arr2,$arr3...);//数组进行合并,保留键值,有重复后来者居上(取后者)【返回新数组】
    $arr1+$arr2 // 发现有key值相同的,取前者,第二个重复的值丢弃

    array_intersect($arr1,$arr2)//返回两个数组的交集,键值不变
    array_diff($arr1,$arr2)//返回两数组的差集,返回的值为第一个数组的值,键值不变

    array_chunk($arr,2)//分割数组,把$arr按照【2个为一组】均等分割【返回一个二维数组】
  • 数组的数据结构【2.无返回值,传值引用,就直接对原数组进行了修改】

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    array_shift($arr)//从开头,删除数组第一个元素
    array_unshift($arr,"one","two")//从开头,添加元素
    array_pop($arr)//从结尾,删除数组最后一个元素
    array_push($arr,"aaa");//从结尾,添加元素

    current($arr)//返回数组中的当前单元 比如是关联数组是不知道下标,可以输出当前数组的办法解决
    key($arr)//返回当前指针指向元素的键值
    next($arr)//当前指针下移
    pre($arr)//当前指针上移
    end($arr)//指针指到最后
    reset($arr)//指针回归到开头

    unset($arr)//销毁此数组
  • 其他

    1
    2
    3
    4
    5
    array_rand($arr,2);//随机返回两个$arr数组当中的key【返回值为值或者数组】
    shuffle($arr)//随机的重组$arr,顺序变乱【返回新数组,保留键值】
    array_sum($arr);//返回$arr的value的和【返回一个值】
    range(0,10,2,)//快速创建0,10的数组,间隔为2,所以有5个值【返回新索引数组】
    http_build_query($arr)//把关联数组转换成一个经过urlencode加密的URL eg:array["a"=>2];=>URL:a=2&

字符串函数

  • 返回bool

    1
    2
    isset($a)   //当$a=NULL 或不存在,返回false,反之为true
    empty($a) //当$a=NULL/''/array()/0/'0'/不存在时 返回true,反之为false
  • 返回值为自字符

    1
    2
    3
    4
    5
    6
    7
    substr(字符串,开始地方,[返回字符串的长度]); // 截取字符串的一部分,第一个字符位置为0
    substr_replace($str,"aaa",start[,length]); // 在$str上操作,从第start个开始,把【后边】的字符[全/或length个]替换
    sub_count($str,"is"[,5,10]); //[ 从第五个字符开始,搜索长度为10,]搜索is在$str中出现的次数,【返回次数】
    strstr($email,"@"[,true]) //从头开始搜索,无true返回@后边字符,有true返回@前边的字符[strrchr对比]
    strrchr($email,"@") //从结尾开始搜索,返回@后的所有字符
    str_replace(被替换词,替换词,被搜索字符串,[统计替换次数$num]) //前两个参数也可为数组,两个数组元素个数相同
    str_repeat($str,num); //重复$str字符串 num次,
  • 返回值为数字类的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // 定位
    strpos($str,"@"); //返回@【第一次出现的位置】
    strrpos($str,"@"); //返回@【最后一次出现的位置】

    //统计
    strlen($string);成功则返回字符串 $string 的长度
    mb_strlen($string,'utf8');//获取字符串$string长度,多字节的字符被计为 1。
    str_word_count($str[,0/1/2]); //返回$str中单词的数量[0指返回次数,默认值/1指以数组形式返回单词值/2指返回关联数组,k为单词首字母下标,v单词值]

    //以下四个比较函数,【返回值:相等0,小于-1,大于1】
    strcmp($str1,$str2); //按ASCII码比较 str1>str2 则返回1 相等返回0 <返回-1
    strcasecmp //比较两个字符串(不区分大小写),函数是二进制安全的。类似于strncasecmp(),但是strncasecmp可以指定每个字符串用于比较的字符数。
    strnatcmp($str1,$str2); // 使用"自然"算法来比较两个字符串(区分大小写)
    strnatcasecmp($str1,$str2); // 使用一种"自然"算法来比较两个字符串(不区分大小写)

    number_format(10000[,2]);
    //==》10,000.00 把第一个参数格式化,保留2位小数

    在自然算法中,数字 2 小于数字 10。在计算机排序中,10 小于 2,这是因为 10 中的第一个数字小于 2。

  • 文本处理类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    strtoupper($str)    //字母全转为大写【返回全大写字符串】
    strtolower() //字母全转为小写【返回全小写字符串】
    ucfirst() //整个$str首字母大写
    ucword() //$str每个单词首字母大写

    strtotime('2015-10-10 10:10:10'); //指定时间转换为时间戳【返回时间戳】

    str_pad($str,length,[---,STR_PAD_BOTH]); //在$str的两边填补“---“,注意,length若小于$str长度,不填补
    trim($str[,"a",STR_PAD_BOTH]) //去除两边/左/右的空白或"a",默认是空白,或自定义字符

    floatval("123.45aa") //=》获取变量的浮点值【123.45】
  • HTML类处理

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    htmlspecialchars($str)  //函数把【预定义字符】转换为【 HTML 实体】,&转换成&amp
    htmlspecialchars_decode($str); //把【HTML实体】转换成【预定义字符】,&amp转换成&
    htmlentities($str); //函数把【预定义字符】转换为【 HTML 实体】,&转换成&amp,有乱码问题,注意第二第三个参数,若编码不正确,会在实体化时把信息丢失。
    html_entity_decode($str); //把【HTML实体】转换成【预定义字符】,&amp转换成&, &gt 转成 <

    addslashes($html); //添加转义字符“/”
    stripslashes($html); //删除转义字符“/”
    strip_tags($html); //去除HTML标签

    nl2br($str); //在$str中的换行/n前插入<br>,因为\n在源码可以换行,但是在浏览器窗口不行,有这个就可以
    iconv( from_charset ; to_charset,$str); //转化字符格式,如$file_name = iconv("gb2312","utf-8",$file_name);

正则函数

  • 字符串的匹配查找

    1
    2
    3
    4
    preg_match($pattern,$subject,$arr); //按正则$pattern处理$subject,第一次匹配结果返回到数组中【函数的返回值为匹配次数】
    preg_match_all($pattern,$subject,$arr) //按正则$pattern处理$subject,全部匹配结果返回到数组中【函数的返回值为匹配次数】
    strstr($str,"@"[,true]);
    strpos,strrpos,substr($str,position) //联合使用
  • 字符串的替换

    1
    2
    preg_replace($pattenr,$replace,$str);//【强大的字符串处理函数】在$str中,把$parrern匹配的值替换成$replcae【返回值为处理后的字符串】
    str_replace($str,"aaa","bbb");//把$str中的aaa换成bbb
  • 字符串的分割和链接

    1
    2
    3
    preg_split($pattern,$str);通过一个正则表达式分隔字符串【返回值为数组】
    explode(",",$str[,$limit_num]);//把$str按照","分割成一个数组[可选参数为返回数组的元素个数]【返回一个分割后的数组】
    impolde("+",$arr);//把$arr里的元素按照“+”链接成一个字符串
1
2
3
// 示例
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
// 结果Array([0] => hypertext,[1] => language[2] => programming)

遵循:能用字符串函数解决不用正则的原则,主要依据是速度问题,内部函数快于正则。

数学函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ceil()//向上取整
floor()//向下取整
round();//四舍五入
abs();//取绝对值

rand(10,100)//随机取值
mt_rand(10,100)//随机取值,算法不同,速度更快

fmod()//返回除法浮点形余数

max(int/$arr)//取最大值
min(int/$arr)//取最小值

pow(1024,2)//返回1021的2次幂

时间函数

1
2
3
4
5
6
7
8
9
10
date_default_timezone_set()('PRC');//设置时区为中国
date.timezone ="PRC";//或者直接修改PHP.INI

time(); //默认获取当前时间,【返回时间戳格式】
micritime(); //获取当前时间【返回毫秒的时间戳】
getdate() //获取当前时间,【返回一个数组,参数年,月,日等都有】

mktime(H,i,s,m,d,Y) //指定时间转为时间戳,参数为空的时候作用与time()相同【返回时间戳格式】
strtotime('2015-10-10 10:10:10'); //指定时间转换为时间戳【返回时间戳】
date("Y-m-d H:i:s",time()); //转换时间戳为日期格式【返回目标格式的字符串】

JSON

1
2
3
json_encode($data);//对变量进行JSON编码
json_decode($data)//对JSON格式的字符串进行解码
json_last_error();//返回最后一次反生的错误

SQL函数

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql_connect('localhost',"root","root");   //连接数据库
mysql_select_db('data',$conn); //选择数据库名
mysql_query('set names utf8'); //设置编码

mysql_fetch_row(); //返回索引数组
mysql_fetch_array(); //试返回值为关联/索引数组
mysql_fetch_object; //返回对象
mysql_fetch_assoc(); //返回关联数组

mysql_num_rows(); //返回上一次select的查询语句条数
mysql_affected_rows(); //返回上一次insert,update,delete的数据条数

mysql_close(); //关闭数据库

URL处理函数

1
2
3
4
5
urlencode($url) //对该URL进行编码;原因:防止乱码,解决空格的呢个字符不能传递问题,form也是此编码格式传递
urldecode($url) //对该URL进行解码
parse_url($url) //返回该URL的所有信息,[scheme协议][host域名] [path路径][query参数] 【返回含信息的数组】
pathinfo($url) //["dirname"目录名] ["basename"文件名] ["extension"文件后缀]【返回含信息的数组,下标不同】
get_meta_tags($url) //获取该页面的所有META标签【返回关联数组】

其他函数

1
2
3
sleep(10)//脚本执行到这里后,延迟10秒继续执行
serialize()//返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。
unserialize()//对单一的已序列化的变量进行操作,将其转换回 PHP 的值。

当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 wakeup() 成员函数

参考:

  1. PHP常用函数归类总结【大全】
展示不展示。展示不展示。
已标记关键词 清除标记
实付 29.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值