PHP基础

变量
变量检测

bool isset ( mixed $var [, mixed $… ] )— 检测变量是否设置

注意:一次可以检测多个变量,有一个变量未设置,则返回false; 如果 var 存在并且值不是 NULL 则返回 TRUE,否则返回 FALSE。
变量类型判断

string gettype ( mixed $var ) — 获取变量的类型

返回值:

“boolean”
“integer”
“double”(由于历史原因,如果是 float 则返回“double”,而不是“float”)
“string”
“array”
“object”
“resource”

判断是否是指定类型的变量:is_array,is_bool,is_float(is_double),is_int(is_integer),is_null,is_string,is_object,is_resource
变量类型转换
最常见的是字符串与数字的转换,或是数字/字符串->布尔值的转换。

$a='12avaf1422';
$b=1;
echo $a+$b;//13
$num1=3.14;
$num2=(int)$num1;
var_dump($num1);
echo "<br/>";
var_dump($num2);//int(3)

empty() — 检查一个变量是否为空 当var存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE.
以下的东西被认为是空的:

“” (空字符串)
0 (作为整数的0)
0.0 (作为浮点数的0)
“0” (作为字符串的0)
NULL(null值)
FALSE(布尔值false)
array() (一个空数组)
$var; (一个声明了,但是没有值的变量)

传值赋值与引用赋值

$num1=1;
$num2=2;
echo $num2;//2
$num2=&$num1;
echo $num2;//1

引用赋值结合变量销毁unset():

$num1=0;
$num2=&$num1;
unset($num1);
var_dump($num2,$num1);//int(0) NULL

注意: n u m 1 销 毁 变 量 后 , num1销毁变量后, num1num2值依然存在

动态变量名

$mk='孟珂';
$$mk='裴丹圣';
echo $mk,'love',$$mk;

运算符
算数运算符
整型太大的话,会自动转换成浮点型:

var_dump(100000000000000000000000);//float(1.0E+23)

取模运算时,结果的正负仅仅取决于被除数的正负:

$a=-10;//换成10试试
$b=3;//换成-3试试
echo $a%$b;

比较运算符

三元运算符
(expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。

$test=1;
$re=$test??'不存在';//PHP7+写法
$re=$test?:'不存在';// PHP 5.3+普通写法
echo $re,PHP_EOL;
echo 'hi';

逻辑运算符
x xor y 异或 如果 x 和 y 有且仅有一个为 true,则返回 true

echo( (10 xor 1) ?:'假');//假

关于“短路”
// foo() 根本没机会被调用,被运算符“短路”了

$a = (false && foo());
$b = (true  || foo());
$c = (false and foo());
$d = (true  or  foo());

关于运算符优先级

“||” 比 “or” 的优先级高
“&&” 比 “and” 的优先级高
=比 and or 的优先级高
$e = false || true;
$f = false or true;
var_dump($e, $f);//true false 
$g = true && false;
$h = true and false;
var_dump($g, $h);//false  true

递增递减运算符

字符串运算符
.就一个点,我只说一次!

赋值运算符

控制结构
Switch case
注意:必须要使用 break 来阻止代码跳入下一个 case 中继续执行!

do while
do
{
要执行的代码;
}
while (条件);

for

for (初始值; 条件; 增量)
{
 要执行的代码;
}

注意:
上面的初始值和增量参数可为空,或者有多个表达式(用逗号分隔)。
条件:循环执行的限制条件。如果为 TRUE,则循环继续。如果为 FALSE,则循环结束。

break 和continue 区别
break 在循环中作用是结束一个循环
continue立即结束本次循环,继续执行下一次循环

函数
PHP 的真正威力源自于它的函数!
函数是一段封装好的代码,随时可调用。

定义格式
命名规则和变量命名一样,但是函数不区分大小写;
函数的名称应该提示出它的功能。

函数执行与返回流程
当函数所有语句执行完毕或者碰到return语句时,函数结束,交回执行权。

函数传参方式
函数内部变量与外界变量无关:

function t($a)
{
    $a += 1;
    return $a;
}

$a = 1;
t($a);
echo $a;//输出1

引用传参(不推荐,因为函数内部的语句影响到了外部的变量,破坏了函数的封装性):

function t(&$a)
{
    $a += 2;
    return $a;
}

$b = 1;
t($b);
echo $b;//输出3

函数作用域
global 关键字用于函数内访问全局变量。

$x=5;
$y=10;

function myTest()
{
global $x,$y;
$y=$x+$y;
}

myTest();
echo $y; //在PHP5版本下输出值是15;在PHP7版本下输出值是10

在PHP7版本中,函数内只能访问全局变量,无法对全局变量的值进行改变!
PHP将所有全局变量存储在一个名为$GLOBALS[index]的数组中。index为 保存变量的名称。上面的实例可以写成这样:

$x=5;
$y=10;

function myTest()
{
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
} 

myTest();
echo $y;

动态调用函数

function wel()
{
    echo 'welcome';
}

function bad()
{
    echo 'bad';
}

$heart = 'wel';
$heart();

时间戳函数
time();
返回当前时间戳
microtime(get_as_float) 函数返回当前 Unix 时间戳的微秒数。
如果 get_as_float 参数设置为 TRUE,则返回浮点数,表示自 Unix 纪元(January 1 1970 00:00:00 格林威治时间(GMT))起精确到微秒的以秒为单位的当前时间.

echo microtime();//0.68480900 1539325171
echo '<hr>';
echo microtime(true);//1539325171.6848

可在程序开头和结尾分别放一个,两者相减,用于计算程序运行时间。

时间戳格式化

echo date('Y-m-d,星期l,a h:i:s');//2018-10-12,星期Friday,AM 06:43:21
echo gmdate('Y-m-d,星期l,a h:i:s');//2018-10-12,星期Friday,AM 06:43:21

date(format,timestamp)
gmdate(format,timestamp)
timestamp 可选。规定时间戳。。默认是当前时间和日期
两个函数日期都是自GMT起。
PHP 5.1.0:有效范围的时间戳是从 1901 年 12 月 13 日 20:45:54 GMT 星期五 到 2038 年 1 月 19 日 03:14:07 GMT 星期二。5.1.0 之前的版本,在某些系统上(例如 Windows)时间戳被限制在从 01-01-1970 到 19-01-2038。

日期解析函数
mktime(hour,minute,second,month,day,year)
函数返回日期的 Unix 时间戳。Unix 时间戳包含 Unix 纪元(1970 年 1 月 1 日 00:00:00 GMT)与指定时间之间的秒数。
strtotime() 函数用于把人类可读的字符串转换为 Unix 时间。

strtotime(' today+1day')

checkdate(month,day,year);如果日期是有效的则返回 TRUE,否则返回 FALSE。

字符串
字符串定义方式
单引号,双引号,
heredoc,nowdoc:

//heredoc
$a='孟珂';
$str1=<<<INTRO
hello world
        {$a}you ok?
INTRO;
echo $str1;

echo $str1;//hello world 孟珂you ok?


//nowdoc
$a='孟珂';
$str1=<<<'INTRO'
hello world
        {$a}you ok?
INTRO;
echo $str1;//hello world {$a}you ok?

相同点:用于定义大段文本;
1.标识符可以自定义 一般的 有EOT ,EOD EOF 等, 只有保持开始表示符和结束表示符一样即可。
2.结束表示符必须独占一行,且必须顶格写,不能有空格,最后以 ‘;’ 分号结尾。
3.所有引用的字符串中可以包含变量,无需字符串连接符。
不同点:(同单引号和双引号的不同点)
转义
变量解析
速度:单引号不需要分析串内有没有变量,需要转义的内容也少,速度更快。
字符串常用函数
strlen(string) 函数返回字符串的长度。
utf-8编码,一个中文占3个字节
mixed mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] )
获取一个 string 的长度。
encoding 参数为字符编码。如果省略,则使用内部字符编码。

echo mb_strlen('孟珂','utf-8');//2

strpos(string,find,start)
函数查找字符串在另一字符串中第一次出现的位置。

对大小写敏感。
如果没有找到字符串则返回 FALSE。
注释: 字符串位置从 0 开始,不是从 1 开始。
stripos() - 查找字符串在另一字符串中第一次出现的位置(不区分大小写)
strripos() - 查找字符串在另一字符串中最后一次出现的位置(不区分大小写)
strrpos() - 查找字符串在另一字符串中最后一次出现的位置(区分大小写)
str_replace(find,replace,string,count)str_replace(find,replace,string,count)
以其他字符替换字符串中的一些字符(区分大小写)。
str_ireplace() 函数执行不区分大小写的搜索。

echo str_replace('fuck','**','fuckyoufuck');//**you**

如果搜索的字符串是数组,那么它将返回数组。
如果搜索的字符串是数组,那么它将对数组中的每个元素进行查找和替换。
如果查找的是数组,而替换的是字符串,那么替代字符串将对所有查找到的值起作用。

print_r(str_replace('fuck','***',array('fuck you','fuckyoufuck')));//Array ( [0] => *** you [1] => ***you*** ) 

如果同时需要对数组进行查找和替换,并且需要执行替换的元素少于查找到的元素的数量,那么多余元素将用空字符串进行替换

$find = array("Hello","world");
$replace = array("B");
$arr = array("Hello","world","!");
print_r(str_replace($find,$replace,$arr));//Array ( [0] => B [1] => [2] => ! )

查找元素和替换元素都为数组时,它俩里边的值一一对应。

$find = array("Hello","world");
$replace = array("B",'c');
$arr = array("Hello","world","!");
print_r(str_replace($find,$replace,$arr));//Array ( [0] => B [1] => c [2] => ! )

**strtr(string,array)**批量替换字符串

echo strtr('hello world',['hello'=>'hi','world'=>'earth']);//hi earth

substr(string,start[,length])
函数返回字符串的一部分。
注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。
length可选。规定被返回字符串的长度。默认是直到字符串的结尾
explode(separator,string,limit)
把字符串打散为数组。
implode(separator,array)
返回由数组元素组合成的字符串
separator 可选。规定数组元素之间放置的内容。默认是 “”(空字符串)

数组
声明方式
array()来声明;
是一种复合数据,可以装下多个值,每个值用不同的键来区分。
数组类型
索引数组:键五特殊意义,为纯数字
关联数组 :字符串做键,一般能体现该单元的内容
多维数组
数组键规则
如果不声明键,则从0,1,2递增来生成键

如果已经存在某1个或几个数字键,则从最大的数字键,递增生成数字键

$arr=array(3=>'a','b');
print_r($arr);//Array ( [3] => a [4] => b )

如果键声明重复了,后面的值覆盖前面的值

$arr=array(3=>'a',3=>'b','c');
print_r($arr);//Array ( [3] => b [4] => c )

操作数组单元
增加单元
a r r [ ] = arr[]= arr[]=value;
或者:
a r r [ arr[ arr[key]=$value;
读取单元值
a r r [ arr[ arr[key]
修改单元值
a r r [ arr[ arr[key]= v a l u e 删 除 单 元 值 u n s e t [ value 删除单元值 unset[ valueunset[arr[ k e y ] ] 遍 历 数 组 f o r e a c h ( key]] 遍历数组 foreach( key]]foreach(arr as v a l u e ) 或 者 f o r e a c h ( value){} 或者 foreach( value)foreach(arr as k e y = &gt; key=&gt; key=>value){}

游标操作
current() 函数返回数组中的当前元素的值。
end() - 将内部指针指向数组中的最后一个元素,并输出
next() - 将内部指针指向数组中的下一个元素,并输出
prev() - 将内部指针指向数组中的上一个元素,并输出
reset() -将内部指针指向数组中的第一个元素,并输出
each() - 返回当前元素的键名和键值,并将内部指针向前移动
each() 函数在 PHP 7.2.0 中被弃用了。
数组常用函数
array_push(array,value1,value2…)
函数向第一个参数的数组尾部添加一个或多个元素(入栈),
返回值: 返回新数组的长度。
注释:即使数组中有字符串键名,您添加的元素也始终是数字键
注释:如果用 array_push() 来给数组增加一个单元,还不如用 a r r a y [ ] = , 因 为 这 样 没 有 调 用 函 数 的 额 外 负 担 注 释 : 如 果 第 一 个 参 数 不 是 数 组 , a r r a y p u s h ( ) 将 发 出 一 条 警 告 。 这 和 array[] =,因为这样没有调用函数的额外负担 注释:如果第一个参数不是数组,array_push() 将发出一条警告。这和 array[]=arraypush()var[] 的行为不同,后者会新建一个数组。
array_pop(array)
函数删除数组中的最后一个元素。
返回值: 返回数组的最后一个值。如果数组是空的,或者非数组,将返回 NULL。
array_unshift(array,value1,value2,value3…)
用于向数组插入新元素。新数组的值将被插入到数组的开头。
返回值: 返回数组中新的元素数目。
array_shift(array)
删除数组中第一个元素
返回值: 返回被删除元素的值,如果数组为空则返回 NULL
array_key_exists(key,array)
检查某个数组中是否存在指定的键名
返回值: 如果键名存在则返回 true,如果键名不存在则返回 false。
in_array(search,array,type)
搜索数组中是否存在指定的值。
返回值:如果给定的值 search 存在于数组 array 中则返回 true。如果第三个参数设置为 true,函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true。
如果没有在数组中找到参数,函数返回 false。
注释:如果 search 参数是字符串,且 type 参数设置为 true,则搜索区分大小写。
array_merge(array1,array2,array3…)
把一个或多个数组合并为一个数组。
返回值: 返回合并的数组。
注释:如果两个或更多个数组元素有相同的键名,则最后的元素会覆盖其他元素。
注释:如果您仅向 array_merge() 函数输入一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。

$a=array(3=>"red",4=>"green");
print_r(array_merge($a));
//Array ( [0] => red [1] => green )

array_merge_recursive(array1,array2,array3…)
把一个或多个数组合并为一个数组。
返回值: 返回合并的数组。
注释: 该函数与 array_merge() 函数的区别在于处理两个或更多个数组元素有相同的键名时。array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组。
注释: 如果您仅仅向 array_merge_recursive() 函数输入一个数组,结果与 array_merge() 相同,函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。

$a1=array("a"=>"red","b"=>"green");
$a2=array("c"=>"blue","b"=>"yellow");
print_r(array_merge_recursive($a1,$a2));
//Array
(
    [a] => red
    [b] => Array
        (
            [0] => green
            [1] => yellow
        )

    [c] => blue
)

sort(array,sortingtype);
对索引数组按键值进行升序排序。
返回值:如果成功则返回 TRUE,否则返回 FALSE。
注释:本函数为数组中的单元赋予新的键名。原有的键名将被删除。

$cars=array('v'=>"Volvo",'b'=>"BMW",'t'=>"Toyota");
sort($cars);
var_dump($cars);
//array(3) {
  [0]=>
  string(3) "BMW"
  [1]=>
  string(6) "Toyota"
  [2]=>
  string(5) "Volvo"
}

rsort(array,sortingtype);
对数值(即索引)数组按键值进行降序排序。
返回值:如果成功则返回 TRUE,否则返回 FALSE。
usort(array,myfunction);
通过用户自定义的比较函数对数组进行排序。
返回值: 若成功则返回 TRUE,若失败则返回 FALSE。

function my_sort($a,$b)
{
    if ($a==$b) return 0;
    return ($a<$b)?-1:1;
}

$a=array(4,2,8,6);
usort($a,"my_sort");
print_r($a);//Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )

asort(array,sortingtype);
对关联数组按照键值进行升序排序。
返回值: 如果成功则返回 TRUE,如果失败则返回 FALSE。

arsort()
函数对关联数组按照键值进行降序排序。

ksort()
函数对关联数组按照键名进行升序排序。

krsort(array,sortingtype);
对关联数组按照键名进行降序排序。

array_diff(array1,array2,array3…);
返回两个数组的差集数组。
返回值: 返回差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的键值。

array_diff_assoc(array1,array2,array3…);
用于比较两个(或更多个)数组的键名和键值 ,并返回差集。
返回值: 返回数组,该数组包含所有在 array1 中,但是不在任何其他参数数组(array2 或 array3 等等)中的键名和键值。
注释: 与array_diff()区别在于array_diff()是比较数组的值,而array_diff_assoc()的比较包括键和值。

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"green","g"=>"blue");

$result=array_diff_assoc($a1,$a2);
print_r($result);
//Array
(
    [a] => red
    [b] => green
    [c] => blue
    [d] => yellow
)

array_intersect(array1,array2,array3…);
返回两个或多个数组的交集数组。
返回值: 返回交集数组,该数组包括了所有在被比较的数组(array1)中,同时也在任何其他参数数组(array2 或 array3 等等)中的键值。

array_intersect_assoc(array1,array2,array3…)
用于比较两个(或更多个)数组的键名和键值,并返回交集。
返回值: 返回交集数组,该数组包括了所有在被比较的数组(array1)中,同时也在任何其他参数数组(array2 或 array3 等等)中的键名和键值。

array_change_key_case(array,case);
将数组的所有的键都转换为大写字母或小写字母。(默认将数组的键转换为小写字母。)
返回值: 返回键为大写或小写的数组,或者如果 array 非数组则返回 FALSE。
注释:如果在运行该函数时两个或多个键相同,则最后的元素会覆盖其他元素

array_count_values(array)
对数组中的所有值进行计数。
返回值: 返回关联数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数。

array_fill(index,number,value);
用给定的值填充数组,返回的数组有 number 个元素,值为 value。返回的数组使用数字索引,从 start 位置开始并递增。如果 number 为 0 或小于 0,就会出错。
注释:index 必需。被返回数组的第一个索引。
返回值: 返回被填充的数组。

array_filter(array,callbackfunction);
用回调函数过滤数组中的值。
该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中。数组键名保持不变。
返回值: 返回过滤的数组。

function test_odd($var)
{
    return($var & 1);
}

$a1=array("a","b","b",2,3,4,5);
print_r(array_filter($a1,"test_odd"));
//Array ( [4] => 3 [6] => 5 )

array_flip(array);
用于反转/交换数组中所有的键名以及它们关联的键值。
返回值: 如果反转成功,则返回反转后的数组。如果失败,则返回 NULL。
注释:原数组并不会改变!
array_unique(array)
移除数组中的重复的值
返回值: 返回被过滤的数组。
**注释:**被保留的数组将保持第一个数组项的键名类型。
注释:原数组并不会改变!
array_reverse(array,preserve)
以相反的元素顺序返回数组。
返回值: 返回反转后的数组。
注释:原数组并不会改变!
注释:经测试,第二个参数prserve为true或false,返回结果相同,不懂为啥???
array_sum(array)
返回数组中所有值的和

$arr=[1,2,3,'a',4,true,false,‘1’];
echo array_sum($arr);
//单元值为true时,单元值的值为1

shuffle(array)
把数组中的元素按随机顺序重新排列
返回值: 若成功则返回 TRUE,若失败则返回 FALSE。
注释:该函数为数组中的元素分配新的键名。已有键名将被删除
注释:会改变原数组!
range(low,high,step)
创建一个包含指定范围的元素的数组。
返回值: 返回包含从 low 到 high 的元素的数组。
注释:如果 low 参数大于 high 参数,则创建的数组将是从 high 到 low。
注释:step 可选。规定元素之间的步进制。默认是 1。
注释:元素可以是单个字母,也可是是数字

$letter = range("a","d");
print_r ($letter);//Array ( [0] => a [1] => c [2] => e )

rand(min,max)
返回随机整数。
注释:如果没有提供可选参数 min 和 max,rand() 返回 0 到 RAND_MAX 之间的伪随机整数,RAND_MAX不同环境下可能会不同。
array_rand(array,number)
返回值:返回数组中的一个随机键名(字符串),或者如果您规定函数不只一个返回键名,则返回包含随机键名的数组
注释:第二个参数用来确定要选出几个元素。如果选出的元素不止一个,则返回包含随机键名的数组,否则返回该元素的键名
超级全局变量
$_GET
$_POST
$_REQUEST包括上面两个,
如果GET参数和POST参数冲突,参考php.ini:request_order=“GP”
$_ENV:服务器操作系统的环境变量,如操作类型,linux,win,mac,环境变量等。
禁用:php-ini variables_order = “GPCS”
$_SERVER获取网站的域名,以及当前访问的脚本,客户IP(REMOTE_ADDR)
$GLOBALS是对全局变量花名册的一个别名,通过该变量可以任意访问全局变量。
不建议使用,破坏了函数封装性。

$A=2;
function t(){
   $GLOBALS['A']=99;
}
t();
echo $A;//99

常量
该值在脚本中不能改变,不能销毁,不能重新声明
常量名不需要加 $ 修饰符
用define()声明:bool define ( string $name , mixed $value [, bool $case_insensitive = false ] ),case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
用defined()检测常量是否存在
习惯全大写
动态常量名
用变量的值做常量的名字:
constant()

define('PI',3.14);
$chang='PI';
echo constant($chang);

递归
递归概念
//从100加到1

function add($n){
   if($n==1){
       return 1;
   }
        return $n+add($n-1);
}
echo add(100);

//用递归打印当前目录下的所有文件以及子目录…

function t($path, $i = 1)//给$i一个初始值
{
    $fh = opendir($path);
    while (($re = readdir($fh)) !== false) {
        echo str_repeat('-', $i) . $re . '<br>';

        if (is_dir($path . '/' . $re) && ($re !== '.') && ($re !== '..')) {//用is_dir($re)有些文件检测不出来
            t($path . '/' . $re, $i + 1);//此处写$i++会出错,不清楚为什么【循环的我脑壳疼,妈呀溜了】
        }
    }
    closedir($fh);
}

$pa = './anluo';
t($pa);

static静态变量
在第一次函数调用声明之后存在,不随函数的结束而结束,当函数再次调用时,可以直接利用上次的结果。

//用递归函数,计算所有单元的和

$arr = array(1, 2, 3, array(4, array(5, 6)));
function sum($arr)
{
    static $sum = 0;
    if (is_array($arr)) {
        foreach ($arr as $key => $value) {
            if (!is_array($value)) {
                $sum += $value;
            } else {
                sum($value);
            }
        }
    }
    return $sum;//碰到return结束本次函数的执行,注意:是本次函数,不是外层的函数。
}

echo sum($arr);//21
echo $sum;//Notice: Undefined variable: sum 

递归练习题
//把为数字的单元值修改为原来的2倍

$arr = array(1, 2, 'b', array(3, 'c', array(4, 5)));
function double($arr)
{
    foreach ($arr as $key => $value) {
        if (is_integer($value)) {
            $arr[$key] = $value * 2;
        }
        if (is_array($value)) {
            unset($arr[$key]);
            array_push($arr, double($value));
        }
    }
    return $arr;
}

$arr=double($arr);
print_r($arr);

//递归创建级联目录

function mk($dir)
{
    $re=is_dir($dir)?:mkdir($dir,0777,true);
    if(!$re){
        $arr=explode('/',$dir);
        $curr=array_shift($arr);
        mkdir($curr,0777,true);
        $dir=implode('/',$arr);
        mk($dir);

    }
    return '创建成功!';
}
echo mk(date('Y/m/d'));

进制与位运算
前面加0代表8进制,8进制里不可能出现8以及大于8的数字:

echo 0123;//83

前面加0x代表16进制:

echo 0x123;//291

作者:Karagrade
来源:CSDN
原文:https://blog.csdn.net/coco1118/article/details/82944272
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值