亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php面向對象中構造 析構 封裝性

2024-09-04 11:43:37
字體:
來源:轉載
供稿:網友

構造函數的聲明與其它操作的聲明一樣,只是其名稱必須是__construct( ),封裝性就是把對象的屬性和服務結合成一個獨立的相同單位,并盡可能隱蔽對象的內部細節

構造方法與析構方法

構造方法:

大多數類都有一種稱為構造函數的特殊方法.當創建一個對象時,它將自動調用構造函數,也就是使用new這個關鍵字來實例化對象的時候自動調用構造方法.

構造函數的聲明與其它操作的聲明一樣,只是其名稱必須是__construct( ).這是PHP5中的變化,以前的版本中,構造函數的名稱必須與類名相同,這種在PHP5中仍然可以用,但現在以經很少有人用了,這樣做的好處是可以使構造函數獨立于類名,當類名發生改變時不需要改相應的構造函數名稱了.為了向下兼容,如果一個類中沒有名為__construct( )的方法,PHP將搜索一個php4中的寫法,與類名相同名的構造方法.

格式:function __construct ( [參數] ) { ... ... }

在一個類中只能聲明一個構造方法,而是只有在每次創建對象的時候都會去調用一次構造方法,不能主動的調用這個方法,所以通常用它執行一些有用的初始化任務.比如對成屬性在創建對象的時候賦初值.

實例代碼如下:

  1. //創建一個人類    
  2. class Person    
  3. {    
  4.     //下面是人的成員屬性    
  5.     var $name;  //人的名子    
  6.     var $sex;    //人的性別    
  7.     var $age;    //人的年齡    
  8.    
  9.     //定義一個構造方法參數為姓名$name、性別$sex和年齡$age    
  10.     function __construct($name$sex$age)    
  11.     {    
  12.         //通過構造方法傳進來的$name給成員屬性$this->name賦初使值    
  13.         $this->name=$name;    
  14.         //通過構造方法傳進來的$sex給成員屬性$this->sex賦初使值    
  15.         $this->sex=$sex;    
  16.         //通過構造方法傳進來的$age給成員屬性$this->age賦初使值    
  17.         $this->age=$age;    
  18.     }    
  19.    
  20.     //這個人的說話方法    
  21.     function say()    
  22.     {    
  23.         echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."";    
  24.     }    
  25. }    
  26.    
  27. //通過構造方法創建3個對象$p1、p2、$p3,分別傳入三個不同的實參為姓名、性別和年齡    
  28. $p1=new Person("張三","男", 20);    
  29. $p2=new Person("李四","女", 30);    
  30. $p3=new Person("王五","男", 40);    
  31.    
  32. //下面訪問$p1對象中的說話方法    
  33. $p1->say();    
  34. //下面訪問$p2對象中的說話方法    
  35. $p2->say();    
  36. //下面訪問$p3對象中的說話方法    
  37. $p3->say();    

輸出結果為:   

我的名子叫:張三 性別:男 我的年齡是:20   

我的名子叫:李四 性別:女 我的年齡是:30   

我的名子叫:王五 性別:男 我的年齡是:40 

  1. //創建一個人類 
  2. class Person 
  3.     //下面是人的成員屬性 
  4.     var $name;  //人的名子 
  5.     var $sex;    //人的性別 
  6.     var $age;    //人的年齡 
  7.     //定義一個構造方法參數為姓名$name、性別$sex和年齡$age 
  8.     function __construct($name$sex$age
  9.     { 
  10.         //通過構造方法傳進來的$name給成員屬性$this->name賦初使值 
  11.         $this->name=$name
  12.         //通過構造方法傳進來的$sex給成員屬性$this->sex賦初使值 
  13.         $this->sex=$sex
  14.         //通過構造方法傳進來的$age給成員屬性$this->age賦初使值 
  15.         $this->age=$age
  16.     } 
  17.     //這個人的說話方法 
  18.     function say() 
  19.     { 
  20.         echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age.""
  21.     } 
  22. //通過構造方法創建3個對象$p1、p2、$p3,分別傳入三個不同的實參為姓名、性別和年齡 
  23. $p1=new Person("張三","男", 20); 
  24. $p2=new Person("李四","女", 30); 
  25. $p3=new Person("王五","男", 40); 
  26. //下面訪問$p1對象中的說話方法 
  27. $p1->say(); 
  28. //下面訪問$p2對象中的說話方法 
  29. $p2->say(); 
  30. //下面訪問$p3對象中的說話方法 
  31. $p3->say(); 

輸出結果為:

我的名子叫:張三 性別:男 我的年齡是:20

我的名子叫:李四 性別:女 我的年齡是:30

我的名子叫:王五 性別:男 我的年齡是:40

析構函數:

與構造函數相對的就是析構函數.析構函數是PHP5新添加的內容,在PHP4中沒有析構函數.析構函數允許在銷毀一個類之前執行的一些操作或完成一些功能,比如說關閉文件, 釋放結果集等,析構函數會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行,也就是對象在內存中被銷毀前調用析構函數.與構造函數的名稱類似,一個類的析構函數名稱必須是__destruct( ).析構函數不能帶有任何參數.

格式:function __destruct ( ) { ... ... }

實例代碼如下:

  1. //創建一個人類    
  2. class Person    
  3. {    
  4.     //下面是人的成員屬性    
  5.     var $name;  //人的名子    
  6.     var $sex;    //人的性別    
  7.     var $age;    //人的年齡    
  8.    
  9.     //定義一個構造方法參數為姓名$name、性別$sex和年齡$age    
  10.     function __construct($name$sex$age)    
  11.     {    
  12.         //通過構造方法傳進來的$name給成員屬性$this->name賦初使值    
  13.         $this->name=$name;    
  14.         //通過構造方法傳進來的$sex給成員屬性$this->sex賦初使值    
  15.         $this->sex=$sex;    
  16.         //通過構造方法傳進來的$age給成員屬性$this->age賦初使值    
  17.         $this->age=$age;    
  18.     }    
  19.    
  20.     //這個人的說話方法    
  21.     function say()    
  22.     {    
  23.         echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."";    
  24.     }           
  25.    
  26.     //這是一個析構函數,在對象銷毀前調用    
  27.     function __destruct()    
  28.     {    
  29.         echo "再見".$this->name."";    
  30.     }    
  31. }    
  32.    
  33. //通過構造方法創建3個對象$p1、p2、$p3,分別傳入三個不同的實參為姓名、性別和年齡    
  34. $p1=new Person("張三","男", 20);    
  35. $p2=new Person("李四","女", 30);    
  36. $p3=new Person("王五","男", 40);    
  37.    
  38. //下面訪問$p1對象中的說話方法    
  39. $p1->say();    
  40. //下面訪問$p2對象中的說話方法    
  41. $p2->say();    
  42. //下面訪問$p3對象中的說話方法    
  43. $p3->say();    
  44.    

輸出結果為:   

我的名子叫:張三 性別:男 我的年齡是:20   

我的名子叫:李四 性別:女 我的年齡是:30   

我的名子叫:王五 性別:男 我的年齡是:40   

再見張三   

再見李四   

再見王五 

封裝性

封裝性是面象對象編程中的三大特性之一,封裝性就是把對象的屬性和服務結合成一個獨立的相同單位,并盡可能隱蔽對象的內部細節,包含兩個含義:1.把對象的全部屬性和全部服務結合在一起,形成一個不可分割的獨立單位(即對象).2.信息隱蔽,即盡可能隱蔽對象的內部細節,對外形成一個邊界〔或者說形成一道屏障〕,只保留有限的對外接口使之與外部發生聯系.

封裝的原則在軟件上的反映是:要求使對象以外的部分不能隨意存取對象的內部數據(屬性),從而有效的避免了外部錯誤對它的"交叉感染",使軟件錯誤能夠局部化,大大減少查錯和排錯的難度.

用個實例來說明吧, 假如某個人的對象中有年齡和工資等屬性,像這樣個人隱私的屬性是不想讓其它人隨意就能獲得到的,如果你不使用封裝,那么別人想知道就能得到,但是如果你封裝上之后別人就沒有辦法獲得封裝的屬性, 除非你自己把它說出去,否則別人沒有辦法得到.在比如說,個人電腦都有一個密碼,不想讓其它人隨意的登陸,在你電腦里面拷貝和粘貼.還有就是像人這個對象, 身高和年齡的屬性, 只能是自己來增漲,不可以讓別人隨意的賦值等等.

實例代碼如下:

  1. //使用private這個關鍵字來對屬性和方法進行封裝:    
  2. //原來的成員:    
  3. var $name;          //聲明人的姓名    
  4. var $sex;           //聲明人的性別    
  5. var $age;           //聲明人的年齡    
  6. function run(){…….}    
  7.    
  8. //改成封裝的形式:    
  9. private $name;          //把人的姓名使用private關鍵字進行封裝    
  10. private $sex;           //把人的性別使用private關鍵字進行封裝    
  11. private $age;           //把人的年齡使用private關鍵字進行封裝    
  12. private function run(){……}  //把人的走路方法使用private關鍵字進行封裝  
  13. //使用private這個關鍵字來對屬性和方法進行封裝: 
  14. //原來的成員: 
  15. var $name;   //聲明人的姓名 
  16. var $sex;   //聲明人的性別 
  17. var $age;   //聲明人的年齡 
  18. function run(){…….} 
  19. //改成封裝的形式: 
  20. private $name;    //把人的姓名使用private關鍵字進行封裝 
  21. private $sex;   //把人的性別使用private關鍵字進行封裝 
  22. private $age;   //把人的年齡使用private關鍵字進行封裝 

private function run(){……} //把人的走路方法使用private關鍵字進行封裝注意:只要是成員屬性前面有其它的關鍵字就要去掉原有的關鍵字”var”. 通過private就可以把人的成員(成員屬性和成員方法)封裝上了.封裝上的成員就不能被類外面直接訪問了,只有對象內部自己可以訪問;下面的代碼會產生錯誤:

  1. class Person    
  2. {    
  3.     //下面是人的成員屬性    
  4.     private $name;  //人的名子,被private封裝上了    
  5.     private $sex;    //人的性別, 被private封裝上了    
  6.     private $age;    //人的年齡, 被private封裝上了    
  7.    
  8.     //這個人可以說話的方法    
  9.     function say()    
  10.     {    
  11.         echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."";    
  12.     }           
  13.    
  14.     //這個人可以走路的方法, 被private封裝上了    
  15.     private function run()    
  16.     {    
  17.         echo "這個人在走路";    
  18.     }    
  19. }    
  20. //實例化一個人的實例對象    
  21. $p1=new Person();    
  22.    
  23. //試圖去給私有的屬性賦值, 結果會發生錯誤    
  24. $p1->name="張三";    
  25. $p1->sex="男";    
  26. $p1->age=20;    
  27.    
  28. //試圖去打印私有的屬性, 結果會發生錯誤    
  29. echo $p1->name."";    
  30. echo $p1->sex."";    
  31. echo $p1->age.""   
  32.    
  33. //試圖去打印私有的成員方法, 結果會發生錯誤    
  34. $p1->run();    

輸出結果為:   

  1. Fatal error: Cannot access private property Person::$name   
  2.  
  3. Fatal error: Cannot access private property Person::$sex   
  4.  
  5. Fatal error: Cannot access private property Person::$age   
  6.  
  7. Fatal error: Cannot access private property Person::$name   
  8.  
  9. Fatal error: Call to private method Person::run() from context ''  
  10.  
  11. class Person 
  12.  
  13.     //下面是人的成員屬性 
  14.     private $name;  //人的名子,被private封裝上了 
  15.     private $sex;    //人的性別, 被private封裝上了 
  16.     private $age;    //人的年齡, 被private封裝上了 
  17.     //這個人可以說話的方法 
  18.     function say() 
  19.     { 
  20.         echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age.""
  21.     }   
  22.     //這個人可以走路的方法, 被private封裝上了 
  23.     private function run() 
  24.     { 
  25.         echo "這個人在走路"
  26.     } 
  27. //實例化一個人的實例對象 
  28. $p1=new Person(); 
  29. //試圖去給私有的屬性賦值, 結果會發生錯誤 
  30. $p1->name="張三"
  31. $p1->sex="男"
  32. $p1->age=20; 
  33. //試圖去打印私有的屬性, 結果會發生錯誤 
  34. echo $p1->name.""
  35. echo $p1->sex.""
  36. echo $p1->age."" 
  37. //試圖去打印私有的成員方法, 結果會發生錯誤 
  38. $p1->run(); 
  39. 輸出結果為: 
  40. Fatal error: Cannot access private property Person::$name 
  41. Fatal error: Cannot access private property Person::$sex 
  42. Fatal error: Cannot access private property Person::$age 
  43. Fatal error: Cannot access private property Person::$name 
  44. Fatal error: Call to private method Person::run() from context '' 

從上面的實例可以看到, 私有的成員是不能被外部訪問的, 因為私有成員只能在本對象內部自己訪問,比如,$p1這個對象自己想把他的私有屬性說出去,在say()這個方法里面訪問了私有屬性,這樣是可以.(沒有加任何訪問控制,默認的是public的,任何地方都可以訪問)

//這個人可以說話的方法, 說出自己的私有屬性,在這里也可以訪問私有方法  

實例代碼如下:

  1. function say()    
  2. {    
  3.     echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."   
  4. ";    
  5.     //在這里也可以訪問私有方法    
  6.     //$this->run();    
  7. }  
  8. //這個人可以說話的方法, 說出自己的私有屬性,在這里也可以訪問私有方法 
  9. function say() 
  10.  echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age." 
  11. "; 
  12.  //在這里也可以訪問私有方法 
  13.  //$this->run(); 

因為成員方法say()是公有的, 所以我們在類的外部調用say()方法是可以的,改變上面的代碼;

  1. class Person    
  2. {    
  3.     //下面是人的成員屬性    
  4.     private $name;  //人的名子,被private封裝上了    
  5.     private $sex;    //人的性別, 被private封裝上了    
  6.     private $age;    //人的年齡, 被private封裝上了    
  7.    
  8.     //定義一個構造方法參數為私有的屬性姓名$name、性別$sex和年齡$age進行賦值   
  9.     function __construct($name$sex$age)    
  10.     {    
  11.         //通過構造方法傳進來的$name給私有成員屬性$this->name賦初使值    
  12.         $this->name=$name;    
  13.         //通過構造方法傳進來的$sex給私有成員屬性$this->sex賦初使值    
  14.         $this->sex=$sex;    
  15.         //通過構造方法傳進來的$age給私有成員屬性$this->age賦初使值    
  16.         $this->age=$age;    
  17.     }    
  18.    
  19.     //這個人可以說話的方法, 說出自己的私有屬性,在這里也可以訪問私有方法    
  20.     function say()    
  21.     {    
  22.         echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."   
  23. ";    
  24.     }    
  25. }    
  26.    
  27. //通過構造方法創建3個對象$p1、p2、$p3,分別傳入三個不同的實參為姓名、性別和年齡    
  28. $p1=new Person("張三","男", 20);    
  29. $p2=new Person("李四","女", 30);    
  30. $p3=new Person("王五","男", 40);    
  31.    
  32. //下面訪問$p1對象中的說話方法    
  33. $p1->say();    
  34. //下面訪問$p2對象中的說話方法    
  35. $p2->say();    
  36. //下面訪問$p3對象中的說話方法    
  37. $p3->say();    
  38.    
  39. 輸出結果為:    
  40. 我的名子叫:張三 性別:男 我的年齡是:20    
  41. 我的名子叫:李四 性別:女 我的年齡是:30    
  42. 我的名子叫:王五 性別:男 我的年齡是:40  
  43. class Person 
  44.     //下面是人的成員屬性 
  45.     private $name;  //人的名子,被private封裝上了 
  46.     private $sex;    //人的性別, 被private封裝上了 
  47.     private $age;    //人的年齡, 被private封裝上了 
  48.     //定義一個構造方法參數為私有的屬性姓名$name、性別$sex和年齡$age進行賦值 
  49.     function __construct($name$sex$age
  50.     { 
  51.         //通過構造方法傳進來的$name給私有成員屬性$this->name賦初使值 
  52.         $this->name=$name
  53.         //通過構造方法傳進來的$sex給私有成員屬性$this->sex賦初使值 
  54.         $this->sex=$sex
  55.         //通過構造方法傳進來的$age給私有成員屬性$this->age賦初使值 
  56.         $this->age=$age
  57.     } 
  58.     //這個人可以說話的方法, 說出自己的私有屬性,在這里也可以訪問私有方法 
  59.     function say() 
  60.     { 
  61.         echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age." 
  62. "; 
  63.     } 
  64. //通過構造方法創建3個對象$p1、p2、$p3,分別傳入三個不同的實參為姓名、性別和年齡 
  65. $p1=new Person("張三","男", 20); 
  66. $p2=new Person("李四","女", 30); 
  67. $p3=new Person("王五","男", 40); 
  68. //下面訪問$p1對象中的說話方法 
  69. $p1->say(); 
  70. //下面訪問$p2對象中的說話方法 
  71. $p2->say(); 
  72. //下面訪問$p3對象中的說話方法 
  73. $p3->say(); 

輸出結果為:

我的名子叫:張三 性別:男 我的年齡是:20

我的名子叫:李四 性別:女 我的年齡是:30

我的名子叫:王五 性別:男 我的年齡是:40因為構造方法是默認的公有方法(構造方法不要設置成私有的),所以在類的外面可以訪問到,這樣就可以使用構造方法創建對象, 另外構造方法也是類里面的函數,所以可以用構造方法給私有的屬性賦初值.Say()的方法是默認公有的, 所以在外面也可以訪問的到, 說出他自己的私有屬性.

從上面的例子中我們可以看到, 私有的成員只能在類的內部使用, 不能被類外部直接來存取, 但是在類的內部是有權限訪問的, 所以有時候我們需要在類的外面給私有屬性賦值和讀取出來,也就是給類的外部提供一些可以存取的接口,上例中構造方法就是一種賦值的形式, 但是構造方法只是在創建對象的時候賦值,如果我們已經有一個存在的對象了,想對這個存在的對象賦值, 這個時候,如果你還使用構造方法傳值的形式傳值, 那么就創建了一個新的對象,并不是這個已存在的對象了.所以我們要對私有的屬性做一些可以被外部存取的接口,目的就是可以在對象存在的情況下,改變和存取屬性的值,但要注意,只有需要讓外部改變的屬性才這樣做,不想讓外面訪問的屬性是不做這樣的接口的,這樣就能達到封裝的目的,所有的功能都是對象自己來完成,給外面提供盡量少的操作.

如果給類外部提供接口,可以為私有屬性在類外部提供設置方法和獲取方法,來操作私有屬性.例如:

實例代碼如下:

  1. //私有的屬性年齡    
  2. prvate $age;    
  3.    
  4. //為外部提供一個公有設置年齡的方法    
  5. function setAge($age)    
  6. {    
  7.     //在給屬性賦值的時候,為了避免非法值設置給屬性    
  8.     if($age<0 || $age>130)    
  9.         return;    
  10.     $this->age=$age;    
  11. }    
  12.    
  13. //為外部提供一個公有獲取年齡的方法    
  14. function getAge()    
  15. {    
  16.     return($this->age);    
  17. }  
  18. //私有的屬性年齡 
  19. prvate $age
  20. //為外部提供一個公有設置年齡的方法 
  21. function setAge($age
  22.  //在給屬性賦值的時候,為了避免非法值設置給屬性 
  23.  if($age<0 || $age>130) 
  24.   return
  25.  $this->age=$age
  26. //為外部提供一個公有獲取年齡的方法 
  27. function getAge() 
  28.  return($this->age); 

上面的方法是為一個成員屬性設置和獲取值, 當然你也可以為每個屬性用同樣的方法對其進行賦值和取值的操作,完成在類外部的存取工作.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性jizz18性欧美| 在线观看成人黄色| 亚洲国产成人精品女人久久久| 久久99精品久久久久久琪琪| 97热精品视频官网| 国产精彩精品视频| 欧美大码xxxx| 国产精品18久久久久久首页狼| 国产在线一区二区三区| 日韩av在线影视| 久久人人爽国产| 亚洲最大av在线| 国产精品激情av在线播放| 自拍视频国产精品| 中文字幕日韩av综合精品| 欧美日韩xxx| 精品高清一区二区三区| 亚洲精品国产综合久久| 成人精品久久久| 久久人人爽人人爽人人片av高清| 影音先锋欧美精品| 51精品国产黑色丝袜高跟鞋| 亚洲欧洲免费视频| 日韩成人在线视频| 亚洲欧美一区二区精品久久久| 久久免费少妇高潮久久精品99| 日韩成人xxxx| 欧美成人小视频| 菠萝蜜影院一区二区免费| 国产69精品久久久久9| 欧美洲成人男女午夜视频| 久久久久久999| 欧美日韩国产中字| 欧美黑人国产人伦爽爽爽| 国产精品国产三级国产专播精品人| 亚洲国产欧美在线成人app| 欧美在线视频导航| 久久九九有精品国产23| 久久手机精品视频| 欧美激情区在线播放| 欧美中文字幕精品| 精品国产一区二区三区四区在线观看| 国产aaa精品| 日韩有码在线视频| 色爱av美腿丝袜综合粉嫩av| 日韩日本欧美亚洲| 日韩免费不卡av| 97**国产露脸精品国产| 久久久久久久亚洲精品| 国产亚洲美女精品久久久| 日韩中文理论片| 免费不卡欧美自拍视频| 久久久精品国产网站| 国内外成人免费激情在线视频网站| 亚洲欧美另类中文字幕| 国产日韩换脸av一区在线观看| 欧美一级片一区| 国产精品一区电影| 亚洲美女性视频| 日韩精品一二三四区| 亚洲精品电影在线观看| 91wwwcom在线观看| 久久天堂电影网| 亚洲欧美日韩精品久久亚洲区| 国产精品va在线| 欧美一级免费看| 国产一区二区三区久久精品| 国产一区二区在线播放| 亚洲成色777777在线观看影院| 欧美精品国产精品日韩精品| 精品无人区太爽高潮在线播放| 国外成人性视频| zzijzzij亚洲日本成熟少妇| 欧美激情免费在线| 正在播放国产一区| 大桥未久av一区二区三区| 日本精品免费观看| 深夜福利国产精品| 国产日韩在线播放| 欧美精品一区在线播放| 日韩精品中文字幕视频在线| 97在线观看视频国产| 亚洲三级免费看| 夜夜躁日日躁狠狠久久88av| 国模视频一区二区三区| 久久99亚洲热视| 亚洲另类xxxx| 国产精品视频不卡| 尤物tv国产一区| 日韩中文字幕在线免费观看| 国产欧美在线视频| 欧美性69xxxx肥| 高清一区二区三区四区五区| 亚洲成人激情图| 中文字幕一区日韩电影| 欧美大片免费观看在线观看网站推荐| 欧美日韩国产成人在线观看| 亚洲在线www| 国产美女久久精品香蕉69| 日韩精品视频免费在线观看| 中文字幕亚洲欧美一区二区三区| 亚洲国产精品成人一区二区| 欧美激情一区二区三区高清视频| 久久网福利资源网站| 91亚洲va在线va天堂va国| 欧美成人黑人xx视频免费观看| 91在线观看欧美日韩| 中文字幕v亚洲ⅴv天堂| 欧美精品免费播放| 深夜福利一区二区| 中文字幕精品视频| 国产精品777| 亚洲九九九在线观看| 欧美人与物videos| 国产精品中文久久久久久久| 久久精品久久久久久| 欧美精品少妇videofree| 色偷偷av一区二区三区乱| 精品国产一区av| 国产精品久久999| 第一福利永久视频精品| 81精品国产乱码久久久久久| 久久亚洲精品成人| 亚洲福利在线视频| 欧美日韩国产精品一区二区三区四区| 欧美日韩久久久久| 国产精品久久久久久久久免费| 国产精品海角社区在线观看| 久久久久久久一区二区| 国产99久久精品一区二区 夜夜躁日日躁| 国产精品网站入口| 国产ts人妖一区二区三区| 日韩中文字幕精品视频| 成人黄色在线播放| 日韩精品福利网站| 欧美精品在线观看91| 精品国产欧美一区二区三区成人| 一区二区三区四区视频| 亚洲国产精品成人一区二区| 亚洲xxxx18| 亚洲精品国产拍免费91在线| 丰满岳妇乱一区二区三区| 免费不卡在线观看av| 久久成人av网站| 国产精品一区二区久久久| 亚洲国产私拍精品国模在线观看| 亚洲一区美女视频在线观看免费| 日韩精品一区二区三区第95| 久久在线免费视频| 日韩综合视频在线观看| 九色成人免费视频| 欧美国产日韩一区二区在线观看| 最近2019中文字幕大全第二页| 日韩欧美极品在线观看| 最新国产精品拍自在线播放| 日本精品视频在线播放| 国产中文欧美精品| 91亚洲一区精品| 日韩免费观看网站| 亚洲www永久成人夜色| 欧洲成人在线视频| 92福利视频午夜1000合集在线观看| 欧美日韩性视频| 国产精品91在线观看|