首頁 > 後端開發 > php教程 > php學習01

php學習01

WBOY
發布: 2016-07-29 09:14:28
原創
1188 人瀏覽過

<code><?php
/*
 * 回顾
 * php 魔术方法
 * __<span>set</span>() 当在类外使用类的private 属性时,或不存在的属性时会报错,如果设置了__<span>set</span>()方法,那么就会调用这个方法
 *    __<span>set</span>(成员属性名名称,要设置的成员属性的值)
 * __get() 当在类外获取类的private 属性时,属性时,或不存在的属性时会报错, 如果设置了__get()方法,那么就会调用这个方法
 *    __get(成员属性的名称)
 * __call() 当调用类的不存在的方法时,会报错,若定义了改方法,那么就调用此方法
 *    __call(被调用的方法名,该方法的参数)
 * __callStatic(被调用的方法名,该方法的参数)
 * __clone() 当<strong>对象</strong>克隆时调用该方法
 *    __clone(),默认参数为<span>$this</span>,<span>$that</span>, <span>$this</span> 为要克隆出的<strong>对象</strong>,<span>$that</span>为原<strong>对象</strong>
 * __construct 构造函数
 * __destruct 析构函数
 * __sleep(); 当<strong>对象</strong>序列化之前被调用
 * __wakeup()当反序列化之前调用
 * __autoload(被包含的类名) 当调用一个类名的方法时,如果没有将该类包含进来, 则会报错,当定义了此函数时,就会调用此函数动态加载类文件
   __toString()  当直接输出类的<strong>对象</strong>时会报错,如果定义的该方法,则调用此方法
 *  */

class A {
    private <span>$name</span>;
    private <span>$age</span>;
    public function __construct(<span>$name</span>,<span>$age</span>){
        <span>$this</span>->name = <span>$name</span>;
        <span>$this</span>->age = <span>$age</span>;
    }
    public function __<span>set</span>(<span>$name</span>,<span>$value</span>){
        <span>$this</span>-><span>$name</span> = <span>$value</span>;
    }
    public function __get(<span>$name</span>){
        <span>if</span>(<span>$name</span>==<span>'fuck'</span>)
            <span>return</span><span>"fuck!"</span>;
        <span>if</span>(isset(<span>$this</span>-><span>$name</span>)){
            <span>return</span><span>$this</span>->name;
        }<span>else</span>{
            <span>return</span> NULL;
        }
    }
    public function __call(<span>$name</span>,<span>$args</span>){
        <span>echo</span><span>$name</span> ,<span>"Mothod不存在"</span>;
        var_dump(<span>$args</span>);
    }
    public static function __callStatic(<span>$name</span>,<span>$value</span>){
        <span>echo</span><span>"<strong>静态方法</strong><span>$name</span>不存在"</span>;
    }
    public function <span><span>__clone</span></span>() {
         <span>$this</span>->name = <span>"我是被克隆的"</span>;
    }
    public function <span><span>__sleep</span></span>() {
       // <span>echo</span><span>"正在被序列化"</span>;
        <span>return</span> array(name);
    }
    //重新生成<strong>对象</strong>时,调用
    public function <span><span>__wakeup</span></span>() {
        <span>$this</span>->name = <span>"张三"</span>;
        <span>$this</span>->age = <span>234</span>;
    }
    public function <span><span>__toString</span></span>() {
        <span>return</span><span>"A"</span>;
    }

}
//<span>$a</span> = new A(<span>"张三"</span>,<span>22</span>);
//<span>echo</span><span>$a</span>->name;
//<span>$a</span>->name = <span>"张三"</span>;
//<span>echo</span><span>$a</span>->name;
//<span>$a</span>->get(<span>"xue"</span>,<span>3</span>,<span>"sf"</span>) ;
//<span>$a1</span> = clone <span>$a</span>;
//<span>echo</span><span>$a</span>->name,<span>"<br/>"</span>,<span>$a1</span>->name;
//<span>$p_str</span> = serialize(<span>$a</span>);
//<span>echo</span><span>$p_str</span>;
//<span>$a2</span> = unserialize(<span>$p_str</span>);
//var_dump(<span>$a2</span>);
//function __autoload(<span>$classname</span>){
//       <strong>include</strong> <span>$classname</span>.<span>".php"</span>;
//}
//<span>echo</span><span>$a2</span>->fuck;
//A::ha();
/*
 * <span>1</span>. <span>echo</span> 和print 的区别
 *  <span>echo</span> 是语句,不是函数, 不用括号,可以输出多个值,没有返回值,不能输出数组和<strong>对象</strong> 只能输出简单的类型,如 int,string 
 *  print 是语句,不是函数,不用括号,只能输出一个值,有返回值<span>1</span>,不能输出数组和<strong>对象</strong>,只能输出简单的类型,如int,string
 * <span>2</span>.print_r() 和 var_dump()
 *  print_r() 是函数,可以输出复合类型和简单类型,如int float ,string ,array object,当输出<strong>对象</strong>时以机构表示如 Object{},当输出
 *   数组时表示为Array()
 *  var_dump() 是函数,输出变量的内容,类型,长度,可以输出简单类型,复合类型,常用来调试
 * <span>3</span>.printf 是函数,类似C语言,格式化字符串输出
 * <span>4</span>.sprintf 函数,类似C语言,格式化字符串后返回一个格式化后的字符串不输出
 * 
 */
//print_r(<span>3.55</span>);
//<span>$arr</span> = array(<span>"xue"</span>,<span>3</span>);
// print_r(<span>$arr</span>);
// var_dump(<span>$arr</span>);
//<span>$nb</span> = sprintf(<span>"%s 是个%d吊"</span>,<span>"haha"</span>,<span>3</span>);
//<span>echo</span><span>$nb</span>;
/*
 * 获取文件内容方式
 * <span>1</span>.file_get_contents();
 * 
 */
//<span>$txt</span> = file_get_contents(<span>'data.txt'</span>);
//<span>echo</span><span>$txt</span>;
//<span>$file</span> = fopen(<span>"data.txt"</span>,<span>"r"</span>);
//<span>while</span>(!feof(<span>$file</span>)){
//    <span>$line</span> = fgets(<span>$file</span>);
//   // <span>echo</span><span>$line</span>;
//    
//}
//<span>while</span>(!feof(<span>$file</span>)){
//    <span>$char</span> = fgetc(<span>$file</span>);
//     <span>echo</span><span>$char</span>;
//}
/*
 * strlen() he mb_strlen的区别
 * 两者都是求字符串长度的函数
 * 在strlen只是获得字符串所占的字节数,无法正确处理中文字符
 * 当为GB2313编码时,一个汉字占<span>2</span>位,当为UTF-<span>8</span>编码时,一个汉字占<span>3</span>位
 * mb_strlen()能够正确处理汉字,第二个参数为编码的类型,默认为UTF-<span>8</span>,默认为PHP内部的编码,可以用mb_internal_encoding()来查看
 * mb_strlen()并不是php核心函数, 需要加载扩展库来使用,在php.in中 extension = <span>"php_mb_string.dll"</span>
 */
//<span>$str</span> = <span>"黛玉123f"</span>;
//<span>echo</span> strlen(<span>$str</span>); // 输出<span>10</span>
//<span>echo</span> mb_strlen(<span>$str</span>,<span>'UTF-8'</span>); //输出<span>6</span>
//<span>echo</span> mb_internal_encoding();//输出 ISO-<span>8859</span>-<span>1</span>
//
/*
 * php数组函数
 * 数组的键名和值
 * <span>1</span>.is_array()判断是否是数组,是返回TRUE,不是返回<span>false</span>,类似 is_int(); is_float();
 * <span>2</span>.array explode ( string <span>$delimiter</span> , string <span>$string</span> [, int <span>$limit</span> ] )此函数将字符串分割为数组
 * <span>3</span>.string implode ( string <span>$glue</span> , array <span>$pieces</span> )将数组分割为字符串
 * <span>4</span>.array_values()返回数组所有的值,请给其建立数字<strong>索引</strong>
 * <span>5</span>.array array_keys ( array <span>$input</span> [, mixed <span>$search_value</span> = NULL [, bool <span>$strict</span> = <span>false</span> ]] )
 * <span>6</span>.array_key_exists() 检索指定的键名或<strong>索引</strong>是否在数组中,存在返回<span>true</span>,否则返回<span>false</span>
 * <span>7</span>.array_flip()交换数组的键名和值,若存在相同值,则以最后一个键值为准
 * <span>8</span>.array_search() 在数组中搜索给定的值,若存在返回对应的键名,否则返回FALSE
 * <span>9</span>.检索数组中是否存在某个值,存在返回<span>true</span>,不存在返回FALSE
 * <span>10</span>.isset(<span>$arr</span>[<span>'apple'</span>] 检测指定的键名知否存在给定的数组中,存在返回<span>true</span>,否则返回<span>false</span>
 * 数组的内部指针
 * current(<span>$arr</span>);  返回数组中的当前单元
   pos(<span>$arr</span>);  返回数组中的当前单元
   key(<span>$arr</span>);  返回数组中当前单元的键名
   prev(<span>$arr</span>);  将数组中的内部指针倒回一位
   next(<span>$arr</span>);  将数组中的内部指针向前移动一位
   end(<span>$arr</span>);  将数组中的内部指针指向最后一个单元
   reset(<span>$arr</span>;  将数组中的内部指针指向第一个单元
 * each(<span>$arr</span>);  返回数组当前指针单元的键名和值,以新数组的形式,且当前数组的指针向前移动一步,若到达数组最后一个单元, 则停留为最后一个单元
 *  键值对被返回为四个单元的数组,键名为>,key 和 value。单元 <span>0</span> 和 key 包含有数组单元的键名,<span>1</span> 和 value 包含有数据。 
 * list(<span>$key</span>,<span>$value</span>);  不是真正的函数,是一种语言结构,获得数组当前元素的键名和值,并赋值给变量,list只能用于没有键名和<strong>索引</strong>的数组
 * 
 * 数组和变量之间的转换
 * extract() 从数组中将变量导入到当前的符号表
 * 检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突。 
 * compact() 将变量变为数组
 * 数组的分段和填充
 * array_slice 在数组中取出一段
 *   array_slice(<span>$array</span>,int offset,[int length,<span>false</span>|<span>true</span>]);
 * 若偏移量为负数,则从数组末端开始数
 * 若长度为负数,则序列将终止在距离数组末端这么远的地方
 * array array_splice ( array &<span>$input</span> , int <span>$offset</span> [, int <span>$length</span> = <span>0</span> [, mixed <span>$replacement</span> ]] )
 *   删除数组的某段,根据offset和length,可以用replacement替换被被删除的单元,替换个数和被替换的单元的个数一致,如果为数组,则键名
 *  不保留,只替换值,也可以为字符串,如果没有删除的单元,那么替换的变量将会被插入到offset的位置
 * 
 *  分割多个数组
 *  array_chunk(array,size,[<span>true</span>|<span>false</span>])
 *  将一个数组分割成多个数组,每个数组的元素量为size,size小于<span>1</span>将报错,可能最后一个数组的元素小于size,默认为<span>false</span>,将丢掉原数组的<strong>索引</strong>或键名
 *    重新建立从<span>0</span>开始的数字<strong>索引</strong>,为<span>true</span>时,保留原来的键名或<strong>索引</strong>
 *  
 *  数组的填充
 *  array_pad(array,length,value);
 *  将数组用value填充到length长度,
 *  若length小于等于数组的长度,则不填充
 *  如果length为负数, 则向左填充
 *  
 *  数组与栈
 *  array_push(array,value,,,);
 *  将一个或多个值压入数组栈,返回此数组的元素个数
 *  array_pop(array);
 *  返回一个数组的栈顶元素,如果数组为空或者不是数组,则返回NULL
 * 
 *  数组与列队
 *  array_shift(array);
 *  将返回数组的第一个元素,数组的元素个数减一,后面的元素向前移动,数字键名从<span>0</span>开始重新技术,关联键名不变
 *  若数组为空,或不为数组,则返回NULL
 *  array_unshift(array,value,,,);
 *  将值插入数组的开头,所有的数字<strong>索引</strong>将重新从<span>0</span>开始技术,关联键名不变
 * 
 *  数组排序
 *  键值排序
 *  sort(array,[]); 将数组的值从小到大排序,操作成功返回<span>true</span>,否则返回<span>false</span>
 *  忽略键名的数组排序
 *  rsort(array[],,),将数组的值从大到小排序,操作成功返回<span>true</span>,否则返回<span>false</span>
 *  忽略键名的数组排序
 *  usort(array,funcname);调用用户定义的函数对数组排序
 *  忽略键名的数值排序
 * 
 *  asort() 保留键名的数值排序
 *  arsort() 保留键名的数值排序
 *  uasort()
 *  =========
 *  键名排序
 *  ksort() 用键名排序,主要用于关联数组
 *  krsort() 按照键名逆序排序
 *  uksort() 自定义函数排序
 *  =========
 *  自然排序法排序
 *  natsort();自然排序
 *  natcasesort()自然排序,忽略大小写
 *  
 *  数组的计算
 *  array_sum()计算数组元素的和
 *  数组的合并
 *  array_merge(array1,array2);则键名会以连续方式重新<strong>索引</strong>
 *  array1+array2  对于相同的键名只保留第一个
 *  如果你想完全保留原有数组并只想新的数组附加到后面,用 + 运算符
 *  array_merge_recursive() 递归合并数组
 *  如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去,这将递归下去,因此如果一个值本身是一个数组,本函数将按照相应的条目把它合并为另一个数组。然而,如果数组具有相同的数组键名,后一个值将不会覆盖原来的值,而是附加到后面。 
 *  
 *  数组的差集
 *  array_diff(array1,array2,array3,,,);返回在array1中但不在其他数组中的元素
 *  array_diff_assoc(array1,array2,array3...);返回在array1中但不在其他数组中的元素,键名也做比较,只有键名和键值都相同时才算
 *  
 *  数组的交集
 *  array_intersect(array1,array2,,,);返回数组的交集
 *  array_intersect_assoc(array1,array2,,,);返回数组的交集,键名也做比较
 *  
 *  其他的数组函数
 *  range(start,max,step);创建一个start到max范围的一个数组,step为步长,默认为<span>1</span>
 *  array_unique()除去数组中重复的值
 *  array_reverse();反转数组,若第二个参数为<span>true</span>时则保留键名
 *  array_rand(array,size);随机返回数组中的一个或多个单元的键名,若为多个则返回包含多个键名的数组
 *  shuffle(array); 将数组的元素打乱,返回FALSE或TRUE
 * 
 *  
 * 

 */
//var_dump  (is_array(<span>3</span>));
<span>$arr</span> = explode(<span>","</span>,<span>"I,am,hello,3"</span>);
print_r(<span>$arr</span>);
<span>echo</span> implode(<span>$arr</span>);
//array_values()
<span>$arr</span> = array_values(array(<span>'name'</span>=><span>'daiyutage'</span>,<span>"age"</span>=><span>20</span>));
print_r(<span>$arr</span>);
<span>$arr</span> = array_keys(array(<span>'name'</span>=><span>"daiyutage"</span>,<span>"age"</span>=><span>20</span>));
print_r(<span>$arr</span>);
var_dump(array_key_exists(<span>'name'</span>,array(<span>"name"</span>=><span>"daiyu"</span>)));
var_dump (array_flip((array(<span>"a"</span>=><span>1</span>,<span>"b"</span>=><span>1</span>,<span>"ddd"</span>=><span>33</span>))));
<span>echo</span><span>in</span>_array(<span>"daiyutage"</span>,array(<span>"name"</span>=><span>"daiyutage"</span>));
<span>$arr</span> = array(<span>"name"</span>=><span>1</span>);
<span>echo</span> isset(<span>$arr</span>[<span>'name'</span>]);

<span>$foo</span> = array(<span>"Robert"</span> => <span>"Bob"</span>, <span>"Seppo"</span> => <span>"Sepi"</span>,<span>"name"</span>=><span>3324</span>);
<span>$bar</span> = each(<span>$foo</span>);
print_r(<span>$bar</span>);
<span>$bar</span> = each(<span>$foo</span>);
print_r(<span>$bar</span>);
<span>$info</span> = array(<span>"name"</span>,<span>"haha"</span>);
<span>unset</span>(<span>$a</span>);
list(<span>$a</span>[<span>0</span>],<span>$a</span>[<span>1</span>])  = <span>$info</span>;
//print_r(<span>$a</span>);
//
//<span>$name</span> = <span>"diayutage"</span>;
//extract(array(
//     <span>"name"</span>=><span>"xue"</span>,
//     <span>"age"</span>=><span>22</span>,
//     <span>"school"</span>=><span>"lut"</span>
//),EXTR_PREFIX_SAME,<span>'WX'</span>);
//<span>echo</span><span>$name</span>,<span>" "</span>,<span>"<span>$age</span>"</span>,<span>"  "</span>,<span>"<span>$school</span>"</span>,<span>" "</span>,<span>$Wx_name</span>;

//课本,<span>1</span>,<span>2</span>,<span>3</span>,《书读百遍,其义自现》
//compact
<span>$firstname</span> = <span>"Peter"</span>;
<span>$lastname</span> = <span>"Griffin"</span>;
<span>$age</span> = <span>38</span>;
<span>$color</span>=<span>"red"</span>;

<span>$rs</span> = array(<span>"color"</span>,<span>"fx"</span>);

//<span>$result</span> = compact(<span>"firstname"</span>, <span>"lastname"</span>, <span>"age"</span>,<span>$rs</span>);
//print_r(<span>$result</span>);
<span>$arr</span> = array(<span>"a"</span>,<span>"xx"</span>=><span>"b"</span>,<span>6</span>=><span>"c"</span>,<span>"d"</span>,<span>"e"</span>);
//print_r(array_slice(<span>$arr</span>,<span>2</span>,-<span>1</span>,<span>true</span>));
//   array_splice(<span>$arr</span>,<span>1</span>,-<span>4</span>,<span>"xxxxx"</span>);
// print_r(<span>$arr</span>);
//print_r(array_chunk(<span>$arr</span>,<span>2</span>,<span>false</span>));
//print_r(array_pad(<span>$arr</span>,-<span>10</span>,<span>33</span>));
//print_r(array_push(<span>$arr</span>,<span>"daiyutage"</span>,<span>"fff"</span>));
//<span>echo</span> array_pop(<span>$arrs</span>);
//<span>echo</span> array_shift(<span>$arr</span>);
array_unshift(<span>$arr</span>,array(<span>"hasdf"</span>,<span>"sf"</span>));

<span>$fruits</span> = array(<span>"lemon"</span>, <span>"sdfsf"</span>=><span>"orange"</span>, <span>"banana"</span>, <span>"apple"</span>);
rsort(<span>$fruits</span>);
function cmp(<span>$a</span>,<span>$b</span>){
     <span>return</span><span>$a</span>==<span>$b</span>?<span>0</span>:<span>$a</span><<span>$b</span>?-<span>1</span>:<span>1</span>;
}
//<span>$brr</span> = array(<span>"fsf"</span>,<span>"fs"</span>=><span>3</span>,<span>10</span>=><span>2</span>,<span>4</span>=><span>244</span>,<span>3244</span>);
//ksort(<span>$brr</span>);
//print_r(<span>$brr</span>);
//print_r(array_merge(<span>$fruits</span>,<span>$brr</span>));//则键名会以连续方式重新<strong>索引</strong>
//<span>$a</span> = array(<span>3</span>=><span>"red"</span>,<span>"hello"</span>,<span>"hello"</span>);
//<span>$b</span> = array(<span>"red"</span>,<span>"fe"</span>);
//print_r(array_intersect_assoc(<span>$a</span>,<span>$b</span>));
//var_dump(range(<span>0</span>,<span>12</span>,<span>9</span>));
//print_r(array_reverse(<span>$fruits</span>));
//print_r(array_rand(<span>$fruits</span>));
//(shuffle(<span>$fruits</span>));
// print_r(<span>$fruits</span>);
//
/*
 * 时区设置
 * date_default_timezone_<span>set</span>()设置时区,时区不正确会报错抛出 E_WARNING 而不是 E_STRICT。不区分大小写
 * date_defalut_timezone_get()获取时区
 * 中国时区为Asia/Shanghai 或 PRC 
 * 
 */
//<span>echo</span> date_default_timezone_get();
//error_reporting(E_ALL);
//date_default_timezone_<span>set</span>(<span>"PRC"</span>);
//<span>echo</span> date_default_timezone_get();
//
/* CGI,PHP_mod,FastCGI的区别
 * CGI 通用网关协议
 * 当客户端请求服务器时,服务器fork一个进程,执行php.cgi程序对php页面进行解析,解析完进程销毁,返回服务器,
 * 每次的请求过程,fork->执行->销毁,效率很低,耗费较多的系统资源
 * php_mod
 * php解释器以模块的形式同apache服务器一起启动,使用同一个进程
 * FastCGI
 * CGI的增强版,相当于一个中间层,使用一个进程,客户端->服务器->FastCGI->php解释实例,FastCGI用一个进程常驻内存,并创建多个CGI实例
 * apache与FastCGI的通信为tcp通信,即FastCGI可以为本机,也可以为远程主机
 * apache与CGI的通信为<strong>进程间通信</strong>,必须为同一主机
 * 小总结:
    cgi : 需要开启若干个进程;
    fastcgi : 需要额外开启一个进程;
    php_mod :无需开启额外进程,因为PHP解析器已集成到web服务器中,跟web服务器在同一个进程。
 * 
 *  php_mod配置方式
 *  在apache中,httpd.conf中
 * <span>1</span>    LoadModule php5_module <span>"C:/php5/php5apache2_2.dll"</span>//大约line <span>127</span><span>2</span>   PHPinidir <span>"C:/php5/php.ini"</span><span>3</span>   //修改配置
<span>4</span>   DirectoryIndex index.html index.php//追加index.php
<span>5</span>   AddType application/x-httpd-php .php //line <span>408</span>左右添加
 *  CGI配置方式
 * 
 * 
 */
//error_reporting(E_ALL);
//setcookie(<span>"haha"</span>);
/*
 * cookie 与 session
 * cookie[<span>'login'</span>] = <span>true</span>;
 * A访问
 * session盒子开
 * session[<span>'login'</span>] = <span>true</span>;
 * B访问
 * session盒子开
 * session[<span>'login'</span>] = <span>true</span>;
 * session 在内存中,如果不区分每一个客户端的session,那么session将无法使用
 * 所以需要将每一个请求的session与其客户端关联
 * 方法:
 * 当第一次请求服务器时,服务器生成一个session_id,
 * 通过http头将session_id发送给浏览器,浏览器保存在将此session_id保存在本地的cookie中
 * 当再次请求服务器时,浏览器发送此cookie,服务器收到后用本地cookie中的session_id来访问此客户端的session
 * 
 * 当cookie被禁用时,如何使用session
 * php默认有两种session传递方式
 * <span>1</span>.cookie
 * <span>2</span>.url  如.php?sid=xxx,或者post提交方式,手动通过url添加sid
 *   url  通过设置php.ini参数,自动添加到url
 *   session.use_cookie=<span>1</span>
 *   session.use_>0
 *   session.use.trans_id=<span>1</span>
 *   然后php会自动在url加PHPSESSION=XXXX
 * 
 * <span>3</span>.文件保存sid,第一个页面把sessionid保存在文件中,第二个页面先从这个文件中取sessionid在判断是否登录
 * <span>4</span>.数据库保存sid,和文件原理相同
 * 
 * 当cookie被禁用时,浏览请求时不会再发送cookie到服务器,那么服务器就会收不到cookie=PHPSESSION的,不能使用session
 * 使用url
 * 在前一个页面开启session后,用session_id()获得session_id,然后以get/post方式传递到后一个页面
 * 第二个页面在用此sessio_id来设置 session_id(),然后开启session_start(),就可以使用前面穿过来的session
 * 注意:session_id()必须在session_start()之前调用
 * 
 *
 * 
 */

session_start();
<span>$_SESSION</span>[<span>'login'</span>] = <span>"daiyutage"</span>;
//<span>$sid</span> = session_id();
<span>echo</span><span>"<a href='b1.php'>另一个页面</a>"</span>;</code>
登入後複製
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介紹了php學習01,包含了include,進程間通訊,物件,索引,靜態方法方面的內容,希望對PHP教學有興趣的朋友有所幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板