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
- 區分大小寫
- 區分大小寫的時候:
- 變量名
- 常量名,通常寫成大寫
- 不區分大小寫的時候:
- 函數名、方法名、類名,在調用時盡量使用和定義時相同的名字;
- 魔術常量不區分大小寫,如 LINE,FUNCTION等;
- 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。通過zval、zend_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_PARSE | PHP在腳本的一個語病中被阻塞,不可恢復 |
| 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
3if(判斷語句) {
執行語句體;
}if…else語句
1
2
3
4
5if(判斷語句) {
執行語句體1;
} else {
執行語句體2;
}嵌套if…else語句
1
2
3
4
5
6if(判斷語句) {
執行語句體1;
} else if(判斷語句2) {
執行語句體2;
} else if...
else...
switch語句(多分支選擇性語句)
表達式:
1
2
3
4
5
6switch(表達式) {
case 1: 執行語句體1;break;
case 2: 執行語句體2;break;
...
default:執行語句體n;break;
}switch后面括號內的表達式,可以是整型表達式或字符型表達式,也已是枚舉型數據。表達式的值與case語句后面的值逐個進行匹配,如果匹配得上,就執行case語句后面執行語句體,然后通過break跳出該循環。如果最終沒有case語句匹配的表達式,則執行default后面的執行語句體。(default后面可以不加break)。
while循環
while語句
1
2
3while(判斷語句) {
執行體語句;
}do…while語句
1
2
3do {
執行體語句;
}while(判斷語句)
for循環
for語句
1
2
3for(表達式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
13array_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
4array_unique($arr);//去掉$arr中的重復值,重復的保留第一個值,【返回數組,鍵值保留】
array_count_values($arr)//統計數組值出現的次數,【返回數組,KEY為原來數組的值,VALUE為統計的次數】
count($arr[,1])/sizeof();//統計$arr的元素個數,參數"1"表示統計多維數組開啟,默認0為關閉【返回統計個數】回調函數
1
2
3
4array_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
11array_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
13array_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
5array_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
2isset($a) //當$a=NULL 或不存在,返回false,反之為true
empty($a) //當$a=NULL/''/array()/0/'0'/不存在時 返回true,反之為false返回值為自字符
1
2
3
4
5
6
7substr(字符串,開始地方,[返回字符串的長度]); // 截取字符串的一部分,第一個字符位置為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
11strtoupper($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
11htmlspecialchars($str) //函數把【預定義字符】轉換為【 HTML 實體】,&轉換成&
htmlspecialchars_decode($str); //把【HTML實體】轉換成【預定義字符】,&轉換成&
htmlentities($str); //函數把【預定義字符】轉換為【 HTML 實體】,&轉換成&,有亂碼問題,注意第二第三個參數,若編碼不正確,會在實體化時把信息丟失。
html_entity_decode($str); //把【HTML實體】轉換成【預定義字符】,&轉換成&, > 轉成 <
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
4preg_match($pattern,$subject,$arr); //按正則$pattern處理$subject,第一次匹配結果返回到數組中【函數的返回值為匹配次數】
preg_match_all($pattern,$subject,$arr) //按正則$pattern處理$subject,全部匹配結果返回到數組中【函數的返回值為匹配次數】
strstr($str,"@"[,true]);
strpos,strrpos,substr($str,position) //聯合使用字符串的替換
1
2preg_replace($pattenr,$replace,$str);//【強大的字符串處理函數】在$str中,把$parrern匹配的值替換成$replcae【返回值為處理后的字符串】
str_replace($str,"aaa","bbb");//把$str中的aaa換成bbb字符串的分割和鏈接
1
2
3preg_split($pattern,$str);通過一個正則表達式分隔字符串【返回值為數組】
explode(",",$str[,$limit_num]);//把$str按照","分割成一個數組[可選參數為返回數組的元素個數]【返回一個分割后的數組】
impolde("+",$arr);//把$arr里的元素按照“+”鏈接成一個字符串
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() 成員函數
參考:
總結
以上是生活随笔為你收集整理的PHP(三)——PHP基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大角虫漫画APP《困病之笼》获得贴吧封奖
- 下一篇: 房贷lpr利率是什么意思