日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PEAR簡(jiǎn)介:用PEAR來(lái)寫(xiě)你的下一個(gè)php程序

瀏覽:178日期:2024-01-10 08:07:14

pear簡(jiǎn)介:用pear來(lái)寫(xiě)你的下一個(gè)php程序;

內(nèi)容:

什么是pear?yàn)槭裁匆褂茫穑澹幔颍浚穑澹幔蚰芙o我?guī)?lái)什么好處?pear的編碼規(guī)則開(kāi)始使用pear總結(jié)相關(guān)資源作者簡(jiǎn)介

潘凡(night sailer) (nightsailer@hotmail.com)北京賽迪網(wǎng)信息技術(shù)有限公司2001 年 6 月你可能已經(jīng)是個(gè)php的老手了,寫(xiě)了很多非常棒的代碼。但是,如果你現(xiàn)在要把它們加入到你現(xiàn)在的項(xiàng)目中去,是否有些吃力?你的朋友想使用你的代碼作為他的項(xiàng)目中的一個(gè)模塊,但是你發(fā)現(xiàn)你們使用了截然不同的編碼風(fēng)格,讓他適應(yīng),甚至不如重寫(xiě)一個(gè)!請(qǐng)跟我來(lái),使用pear標(biāo)準(zhǔn)編寫(xiě)你的php程序吧,你的程序?qū)?huì)擁有更大的活力,你的程序和代碼將會(huì)很方便地和其他高手的代碼融合在一起,pear就象cpan對(duì)于perl一樣,會(huì)讓php產(chǎn)生更高的能量。什么是pearpear是php擴(kuò)展與應(yīng)用庫(kù)(the php extension and application repository)的縮寫(xiě)。它是一個(gè)php擴(kuò)展及應(yīng)用的一個(gè)代碼倉(cāng)庫(kù),簡(jiǎn)單地說(shuō),pear就是php的cpan。為什么要使用pear?php是一個(gè)非常優(yōu)秀的腳本語(yǔ)言,簡(jiǎn)潔、高效,隨著4.0的發(fā)布,越來(lái)越多的人使用它來(lái)進(jìn)行動(dòng)態(tài)網(wǎng)站的開(kāi)發(fā),可以說(shuō),php已經(jīng)成為最優(yōu)秀的internet開(kāi)發(fā)語(yǔ)言之一,尤其對(duì)于那些需要能夠快速、高效地開(kāi)發(fā)中小規(guī)模的商業(yè)應(yīng)用的網(wǎng)站開(kāi)發(fā)人員,php是其首選的語(yǔ)言。但是隨著php的應(yīng)用的不斷增多,對(duì)于這些應(yīng)用缺乏統(tǒng)一的標(biāo)準(zhǔn)和有效的管理,因此,php社區(qū)很難象perl社區(qū)的人們那樣方便的共享彼此的代碼和應(yīng)用,因?yàn)閜hp缺乏象cpan那樣的統(tǒng)一的代碼庫(kù)來(lái)分類(lèi)管理應(yīng)用的代碼模塊(熟悉perl的人都知道,cpan是一個(gè)巨大的perl的擴(kuò)展模塊倉(cāng)庫(kù),編寫(xiě)的應(yīng)用模塊可以放在cpan下面的適當(dāng)?shù)姆诸?lèi)目錄下面,其他的人可以很方便地復(fù)用,當(dāng)然,你編寫(xiě)應(yīng)用模塊時(shí)候也需要遵守其中的準(zhǔn)則。)為此,pear就應(yīng)運(yùn)而生了,并且從4.04開(kāi)始,隨著php核心一起被分發(fā)。pear能給我?guī)?lái)什么好處?1.如前所述,pear按照一定的分類(lèi)來(lái)管理pear應(yīng)用代碼庫(kù),你的pear代碼可以組織到其中適當(dāng)?shù)哪夸浿校渌娜丝梢苑奖愕貦z索并分享到你的成果。2.pear不僅僅是一個(gè)代碼倉(cāng)庫(kù),它同時(shí)也是一個(gè)標(biāo)準(zhǔn),使用這個(gè)標(biāo)準(zhǔn)來(lái)書(shū)寫(xiě)你的php代碼,將會(huì)增強(qiáng)你的程序的可讀性,復(fù)用性,減少出錯(cuò)的幾率。3.pear通過(guò)提供2個(gè)類(lèi)為你搭建了一個(gè)框架,實(shí)現(xiàn)了諸如析構(gòu)函數(shù),錯(cuò)誤捕獲功能,你通過(guò)繼承就可以使用這些功能。pear的編碼規(guī)則pear的編碼規(guī)則包括縮進(jìn)規(guī)則,控制結(jié)構(gòu),函數(shù)調(diào)用,函數(shù)定義,注釋?zhuān)a,php標(biāo)記,文件頭的注釋塊,cvs標(biāo)記,url樣例,常量的命名這11方面。下面簡(jiǎn)要地介紹一下:縮進(jìn)規(guī)則:pear中需要使用4個(gè)空格來(lái)縮排代碼,并且不使用tab。如果你使用vim,將下列設(shè)置放入你的~/.vimrc中:set expandtabset shiftwidth=4set tabstop=4

如果,你使用emacs/xemacs,需要把indent-tabs-mode 設(shè)置成nil。不過(guò)你象我一樣喜歡用(x)emacs編輯php文件,我強(qiáng)烈推薦你安裝php-mode,這樣當(dāng)你編寫(xiě)pear代碼的時(shí)候,它會(huì)自動(dòng)調(diào)整你的縮排風(fēng)格,當(dāng)然php-mode還有許多很優(yōu)秀的特性,你可以從資源列表中的地方下載最新版的php-mode。控制結(jié)構(gòu):這里所說(shuō)的控制結(jié)構(gòu)包括: if for while switch 等。對(duì)于控制結(jié)構(gòu),在關(guān)鍵字(如if for ..)后面要空一個(gè)格,然后再跟控制的圓括號(hào),這樣,不至于和函數(shù)調(diào)用混淆,此外,你應(yīng)該盡量完整的使用花括號(hào){},即使從語(yǔ)法上來(lái)說(shuō)是可選的。這樣可以防止你以后需添加新的代碼行時(shí)產(chǎn)生邏輯上的疑惑或者錯(cuò)誤。這里是一個(gè)樣例:if ((條件1) && (條件2)) {語(yǔ)句1;}esleif ((條件3) || (條件4)) {語(yǔ)句2;}else {語(yǔ)句3;}

函數(shù)調(diào)用:對(duì)于函數(shù)調(diào)用,函數(shù)名和左括號(hào)( 之間不應(yīng)該有空格,對(duì)于函數(shù)參數(shù),在分隔的逗號(hào)和下一個(gè)參數(shù)之間要有相同的空格分離,最后一個(gè)參數(shù)和右括號(hào)之間不能有空格。下面是一個(gè)標(biāo)準(zhǔn)的函數(shù)調(diào)用;$result = foo($param1, $param2, $param3);不規(guī)范的寫(xiě)法:$result=foo ($param1,$param2,$param3);$result=foo( $param1,$param2, $param3 );

此外,如果要將函數(shù)的返回結(jié)果賦值,那么在等號(hào)和所賦值的變量之間要有空格,同時(shí),如果是一系列相關(guān)的賦值語(yǔ)句,你添加適當(dāng)?shù)目崭瘢顾鼈儗?duì)齊,就象這樣:$result1 = $foo($param1, $param2, $param3);$var2 = $foo($param3);$var3 = $foo($param4, $param5);

函數(shù)定義:函數(shù)定義遵循'one true brace'習(xí)俗:function connect(&$dsn, $persistent = false){if (is_array($dsn)) {$dsninfo = &$dsn;} else {$dsninfo = db::parsedsn($dsn);}if (!$dsninfo || !$dsninfo['phptype']) {return $this->raiseerror();}return true;}

如上所示,可選參數(shù)要在參數(shù)表的末端,并且總是盡量返回有意義的函數(shù)值。關(guān)于注釋?zhuān)簩?duì)于類(lèi)的在線(xiàn)文檔,應(yīng)該能夠被phpdoc轉(zhuǎn)換,就象javadoc那樣。phpdoc也是一個(gè)pear的應(yīng)用程序,更詳細(xì)的介紹你可以去http://www.phpdoc.de/查看。除了類(lèi)的在線(xiàn)文檔,建議你應(yīng)該使用非文檔性質(zhì)的注釋來(lái)詮釋你的代碼,當(dāng)你看到一段代碼時(shí)想:哦,我想不需要在文檔里去仔細(xì)描述它吧。那么你最好給這段代碼作一個(gè)簡(jiǎn)單的注釋?zhuān)@樣防止你會(huì)忘記它們是如何工作的。對(duì)于注釋的形式,c的 /* */和c++的//都不錯(cuò),不過(guò),不要使用perl或者shell的#注釋方式。包含代碼:無(wú)論什么時(shí)候,當(dāng)你需要無(wú)條件包含進(jìn)一個(gè)class文件,你必須使用requre_once;當(dāng)你需要條件包含進(jìn)一個(gè)class文件,你必須使用include_once;這樣可以保證你要包含的文件只會(huì)包含一次,并且這2個(gè)語(yǔ)句共用同一個(gè)文件列表,所以你無(wú)須擔(dān)心二者會(huì)混淆,一旦require_once 包含了一個(gè)文件,include_once不會(huì)再重復(fù)包含相同的文件,反之亦然。php代碼標(biāo)記:任何時(shí)候都要使用<?php ?>定義你的php代碼,而不要簡(jiǎn)單地使用<? ?>,這樣可以保證pear的兼容性,也利于跨平臺(tái)的移植。文件頭的注釋聲明:所有需要包含在pear核心發(fā)布的php代碼文件,在文件開(kāi)始的時(shí)候,你必須加入以下的注釋聲明:/* vim: set expandtab tabstop=4 shiftwidth=4: */// +----------------------------------------------------------------------+// | php version 4.0 |// +----------------------------------------------------------------------+// | copyright (c) 1997, 1998, 1999, 2000, 2001 the php group; |// +----------------------------------------------------------------------+// | this source file is subject to version 2.0 of the php license,; |// | that is bundled with this package in the file license, and is |// | available at through the world-wide-web at; |// |http://www.php.net/license/2_02.txt.; |// | if you did not receive a copy of the php license and are unable to; |// | obtain it through the world-wide-web, please send a note to |// |license@php.netso we can mail you a copy immediately.; |// +----------------------------------------------------------------------+// | authors: original author; |// | your name |// +----------------------------------------------------------------------+//// $id$

對(duì)于不在pear核心代碼庫(kù)中的文件,建議你也在文件的開(kāi)始處有這樣一個(gè)類(lèi)似的注釋塊,標(biāo)明版權(quán),協(xié)議,作者等等。同時(shí)也在第一行加入vim的modeline,這樣在vim中能夠保持pear的代碼風(fēng)格。cvs標(biāo)記:如上面所展示那樣,在每個(gè)文件中加入cvs的id標(biāo)記,如果你編輯或修改的文件中沒(méi)有這個(gè)標(biāo)記,那么請(qǐng)加入,或者是替換原文件中相類(lèi)似的表現(xiàn)形式(如'last modified'等等)url樣本:你可以參照rfc 2606,使用'http://www.example.com'作為所有的url樣本。常量命名:常量應(yīng)該盡量使用大寫(xiě),為了便于理解,使用下劃線(xiàn)分割每個(gè)單詞。同時(shí),你應(yīng)該常量所在的包名或者是類(lèi)名作為前綴。比如,對(duì)于bug類(lèi)中常量應(yīng)該以bug_開(kāi)始。以上是pear的編碼規(guī)則,詳細(xì)的編碼規(guī)則可以參考pear中的coding_standdard文件的說(shuō)明。為了更好地理解這些編碼規(guī)則,你也可以參考一下現(xiàn)有pear核心模塊的代碼。開(kāi)始使用pearpear使用pear很簡(jiǎn)單,你只需這樣定義你自己的pear程序:require_once 'pear.php';class your_class_name extends pear{你的類(lèi)定義...}

當(dāng)然,你需要遵守前面說(shuō)的pear的編碼規(guī)則,之后你就可以在你的類(lèi)內(nèi)部實(shí)現(xiàn)你要做的事情了。下面,我們展開(kāi)討論一下,實(shí)際上pear為我們提供了2個(gè)預(yù)定義類(lèi):pear:這是pear的基類(lèi),所有的pear擴(kuò)展都要從它繼承派生出來(lái)。pear_error:pear的錯(cuò)誤處理的基類(lèi),你可以選擇派生出自己的錯(cuò)誤處理的類(lèi)。一般來(lái)說(shuō),你不應(yīng)該直接創(chuàng)建pear的實(shí)例,而是要自己派生出一個(gè)新的類(lèi),然后再創(chuàng)建這個(gè)新類(lèi)的實(shí)例。作為基類(lèi),pear給我們提供了一些有用的功能,最主要的就是析構(gòu)函數(shù)和錯(cuò)誤處理析構(gòu)函數(shù)php支持構(gòu)造函數(shù),但是并不支持析構(gòu)函數(shù),不過(guò),php提供register_shutdown_function()這個(gè)函數(shù),從而能夠在腳本終止前回調(diào)注冊(cè)的函數(shù),因此pear利用這個(gè)特性,提供了析構(gòu)函數(shù)的仿真。假如你有一個(gè)pear的子類(lèi),叫做mypear,那么在mypear類(lèi)中,你可以定義一個(gè)函數(shù),函數(shù)名是下劃線(xiàn)加上你的類(lèi)名,_mypear(),這個(gè)函數(shù)就是這個(gè)類(lèi)的析構(gòu)函數(shù)。不過(guò)這個(gè)析構(gòu)函數(shù)和c++中的析構(gòu)函數(shù)不太一樣,它不會(huì)在對(duì)象被刪除的時(shí)候執(zhí)行,而是在腳本結(jié)束的時(shí)候,畢竟這只是一個(gè)仿真。由于是使用了register_shutdown_function(),所以在你的析構(gòu)函數(shù)里,打印的信息將不會(huì)返回瀏覽器中。此外,在你的構(gòu)造函數(shù)中,需要調(diào)用一下它的父類(lèi)的構(gòu)造函數(shù),因?yàn)閜hp不會(huì)自動(dòng)調(diào)用父類(lèi)的構(gòu)造函數(shù),而析構(gòu)函數(shù)需要在pear的構(gòu)造函數(shù)中注冊(cè),我們可以看看pear的源代碼:<code>function pear() {if (method_exists($this, '_'.get_class($this))) {global $_pear_destructor_object_list;$_pear_destructor_object_list[] = &$this;}if ($this->_debug) {printf('pear constructor called, class=%sn',get_class($this));}.....function _pear_call_destructors() {global $_pear_destructor_object_list;if (is_array($_pear_destructor_object_list) && sizeof($_pear_destructor_object_list)) {reset($_pear_destructor_object_list);while (list($k, $objref) = each($_pear_destructor_object_list)) {$destructor = '_'.get_class($objref);if (method_exists($objref, $destructor)) {$objref->$destructor();}}//清空已注冊(cè)的對(duì)象列表,//防止重復(fù)調(diào)用$_pear_destructor_object_list = array();}}....register_shutdown_function('_pear_call_destructors');</code>

上面這段代碼展示了pear是如何實(shí)現(xiàn)析構(gòu)函數(shù)的,在構(gòu)件函數(shù)中,將檢查當(dāng)前類(lèi)中是否有析構(gòu)函數(shù),如果有,那么將把當(dāng)前類(lèi)的引用放入一個(gè)全局列表中,在_pear_call_destructors中,則檢查這個(gè)全局列表中的每個(gè)元素是否存在相應(yīng)的析構(gòu)函數(shù),如果有,則調(diào)用它,最后將全局列表清空。在pear.php的最后一行代碼,則調(diào)用register_shutdown_function('_pear_call_destructors'),注冊(cè)_pear_call_destructors,這樣,當(dāng)腳本執(zhí)行完畢的時(shí)候,php會(huì)回調(diào)這個(gè)函數(shù)。使用析構(gòu)函數(shù),你可以在處理完用戶(hù)的請(qǐng)求,退出之前做一些必要的'善后'工作,典型的例子是,你可以關(guān)閉打開(kāi)的文件,斷開(kāi)數(shù)據(jù)庫(kù)的連接,將某些數(shù)據(jù)存入磁盤(pán)等等。錯(cuò)誤處理pear中可以讓你有很多的方式來(lái)處理錯(cuò)誤,你不僅僅是簡(jiǎn)單地返回一個(gè)錯(cuò)誤代碼,或者錯(cuò)誤的信息,而是可以返回一個(gè)pear_error對(duì)象,或者是由pear_error派生出來(lái)的新的錯(cuò)誤對(duì)象。pear中的錯(cuò)誤對(duì)象的并沒(méi)有限定具體的輸出形式,它可以?xún)H僅是捕獲錯(cuò)誤,不給用戶(hù)返回太多的信息,也可以是去回調(diào)一個(gè)特殊錯(cuò)誤處理函數(shù),同時(shí),即使輸出錯(cuò)誤信息,它也強(qiáng)迫你必須要是html形式,你可以輸出xml,csv形式,或者是其他你自己定義的形式,你只需要從pear_error派生一個(gè)新的類(lèi),然后在適當(dāng)?shù)臅r(shí)候創(chuàng)建并'拋出'這個(gè)新類(lèi)的對(duì)象就可以了。簡(jiǎn)單的錯(cuò)誤處理:在pear中,最簡(jiǎn)單的錯(cuò)誤處理是'拋出'這個(gè)錯(cuò)誤,你只要簡(jiǎn)單地創(chuàng)建并返回一個(gè)pear_error的對(duì)象就可以了。下面是一個(gè)簡(jiǎn)單的例子:<code>function myconnect($host = 'localhost', $port = 1080){$fp = fsockopen($host, $port, $errno, $errstr);if (!is_resource($fp)) {return new pear_error($errstr, $errno);}return $fp;}$sock = myconnect();if (pear::iserror($sock)) {print 'connect error: '.$sock->getmessage().'<br>n'}</code>

如上面代碼所展示的,在執(zhí)行一段可能產(chǎn)生錯(cuò)誤的代碼后,你需要使用pear的iserror來(lái)檢測(cè)是否存在錯(cuò)誤,并且可以使用pear_error的getmessage來(lái)取得最近一次的錯(cuò)誤信息。注意:一定要在關(guān)鍵的地方使用使用pear::iserror使用raiseerrorphp4.0.5以后,pear多了2個(gè)函數(shù):seterrorhandling($mode, $options = null)raiseerror($message = null, $code = null, $mode = null,$options = null, $userinfo = null)

前者可以設(shè)置pear缺省的錯(cuò)誤處理模式,后者是一個(gè)包裝函數(shù),返回一個(gè)pear_error的對(duì)象,和直接創(chuàng)建并返回pear_error的對(duì)象略有不同的是,如果省略$mode,$options等參數(shù),它會(huì)使用缺省值來(lái)創(chuàng)建這個(gè)pear_error的對(duì)象,這些缺省值你可以使用seterrorhandling()來(lái)定制。pear_errorpear_error是pear的錯(cuò)誤對(duì)象的一個(gè)基類(lèi),和pear不同,一般來(lái)說(shuō),你可以直接創(chuàng)建pear_error的實(shí)例,創(chuàng)建方式:$error = new pear_error($message, $code, $mode, $options, $userinfo);$message是你的錯(cuò)誤信息,$code是該錯(cuò)誤的錯(cuò)誤號(hào),后3個(gè)參數(shù)是緊密聯(lián)系的:$mode:是這個(gè)錯(cuò)誤的處理模式,可以下列常量:pear_error_return:僅僅返回該錯(cuò)誤對(duì)象(缺省方式)pear_error_print:在構(gòu)建函數(shù)中打印這個(gè)錯(cuò)誤信息,但是當(dāng)前程序會(huì)繼續(xù)運(yùn)行。pear_error_trigger:使用php的trigger_error() 觸發(fā)一個(gè)錯(cuò)誤,如果你已經(jīng)設(shè)置了錯(cuò)誤處理函數(shù),或者你把php的錯(cuò)誤處理級(jí)別設(shè)置為e_user_error,那么當(dāng)前程序?qū)?huì)被終止。pear_error_die:打印錯(cuò)誤并退出,程序終止。pear_error_callback:使用一個(gè)回調(diào)函數(shù)或者方法來(lái)處理當(dāng)前錯(cuò)誤,程序終止。$options:這個(gè)參數(shù)只有在$mode是pear_error_trigger和pear_error_callback的時(shí)候才起作用,如果是pear_error_trigger,$options必須是e_user_notice, e_user_warning 或 e_user_error這3個(gè)常量的一個(gè),同php中trigger_error的值一致。如果$mode是pear_error_callback,$options可以是一個(gè)字符串,內(nèi)容是要回調(diào)的函數(shù)名,也可以是一個(gè)2元素的數(shù)組,分別是一個(gè)對(duì)象變量,和一個(gè)字符串(標(biāo)明要調(diào)用的方法)。$userinfo:存放附加的用戶(hù)信息,你可以把相關(guān)的調(diào)試信息放在這里。pear_error中有一些常用的方法,這些方法在php文擋沒(méi)有描述,這里一一列出:int getmode:返回當(dāng)前的錯(cuò)誤處理模式,整型。string getmessage:返回當(dāng)前完整的錯(cuò)誤信息,字符串。mixed getcallback:返回當(dāng)前的回調(diào)信息,可能是所回調(diào)的函數(shù)名,或者是(對(duì)象,方法)的數(shù)組。int getcode:返回整型的錯(cuò)誤代碼。string gettype:返回錯(cuò)誤的類(lèi)型,也就是當(dāng)前的類(lèi)名,字符串。string getuserinfo:返回附加的用戶(hù)信息,字符串。string getdebuginfo:內(nèi)容同上。string tostring:返回當(dāng)前對(duì)象的詳細(xì)字符串描述,內(nèi)容包括錯(cuò)誤處理的模式,級(jí)別,錯(cuò)誤信息,錯(cuò)誤代碼,相關(guān)回調(diào)函數(shù)等等。總結(jié)至此,對(duì)于pear的介紹就結(jié)束了。概括地說(shuō),如果你要做一個(gè)pear的擴(kuò)展應(yīng)用,需要這么做:require_once 'pear.php'使用class your_pear_extend extends pear{}定義你的新類(lèi)。在你的類(lèi)的構(gòu)造函數(shù)中,調(diào)用父類(lèi)pear的構(gòu)造函數(shù):function your_pear_extend{$this->pear();...}

如果需要,定義你的析構(gòu)函數(shù) _your_pear_extend如果需要,從pear_error派生出你自己的錯(cuò)誤處理類(lèi)設(shè)置你的錯(cuò)誤處理模式,并在適當(dāng)?shù)臅r(shí)候觸發(fā)錯(cuò)誤。在執(zhí)行可能產(chǎn)生錯(cuò)誤的代碼后,用pear::iserror($obj)捕獲相應(yīng)的錯(cuò)誤。實(shí)現(xiàn)你自己的功能。在最新的php4.05的pear核心發(fā)布里,已經(jīng)有不少優(yōu)秀的應(yīng)用模塊了,比如:phpdoc,cache,html...當(dāng)然,相對(duì)于cpan來(lái)說(shuō),pear只是剛剛起步,需要php社區(qū)的人們的共同努力,來(lái)完善它,增強(qiáng)它,php才會(huì)越來(lái)越強(qiáng)大。相關(guān)資源pear主頁(yè)php主頁(yè)phpdoc主頁(yè),可以從你的pear應(yīng)用源碼產(chǎn)生類(lèi)似javadoc的api文檔php-mode for xemacs/emacs,為emacs/xemacs提供php的語(yǔ)法支持,能夠很好支持pear代碼風(fēng)格vim主頁(yè),非常優(yōu)秀的一個(gè)編輯器,對(duì)php的支持也很好

標(biāo)簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产在线一区不卡| 美女尤物国产一区| 国产麻豆久久| 久久久噜噜噜| 欧美亚洲激情| 久久国产精品久久久久久电车| 蜜臀av国产精品久久久久 | 亚洲调教视频在线观看| 欧美一区二区三区激情视频| 欧美 日韩 国产精品免费观看| 一区在线视频观看| 亚洲3区在线| 国产精品xxx| 久久精品电影| 亚洲综合图色| 久久影院资源站| 性感美女一区二区在线观看| 国产精品毛片在线| 久久精品99国产精品| 国产一区二区三区精品在线观看| 99tv成人| 欧美一级一区| 成人国产综合| 久久亚洲电影| 久久久91麻豆精品国产一区| 激情综合网站| 国产欧美亚洲一区| 成人va天堂| 亚洲欧美在线专区| 黄色欧美在线| 男人的天堂久久精品| 国产激情欧美| 亚洲免费成人| 麻豆国产精品| 国产一区导航| 国产成人精品999在线观看| 亚洲一区二区毛片| 国产麻豆一区| 夜夜嗨一区二区| 久久精品国产99国产精品| 亚洲性色视频| 美女性感视频久久| 日韩午夜一区| 成人在线免费观看网站| 蜜臀av性久久久久蜜臀aⅴ流畅 | 欧美aⅴ一区二区三区视频| 免费av一区| 久久亚洲道色| 亚洲毛片在线免费| 精品欧美久久| 高清不卡亚洲| 日韩国产精品久久久| 亚洲v在线看| 久久99精品久久久野外观看| 巨乳诱惑日韩免费av| 国产精品久久久久久久久妇女| 日韩欧美高清一区二区三区| 欧美va天堂| 老牛影视精品| 国产精品.xx视频.xxtv| 亚洲人妖在线| 合欧美一区二区三区| 日韩一区三区| 精品一区二区三区中文字幕 | 成人在线免费观看网站| 亚洲三级网站| 99国产成+人+综合+亚洲欧美| 肉色欧美久久久久久久免费看| 国产精品网站在线看| 一区二区国产在线观看| 一区二区三区视频免费观看| 国产精品精品国产一区二区| 911精品国产| 亚洲香蕉久久| 一区二区三区国产在线| 日韩一级网站| 视频一区中文| 99久久久国产精品美女| 在线中文字幕播放| 国产精品www.| 国产精品一页| 97久久超碰| 综合一区在线| 免费久久精品视频| 久久国产精品久久w女人spa| 中日韩男男gay无套| 欧美成人国产| 在线一区免费观看| 久久99伊人| 人人精品人人爱| 蜜桃视频在线观看一区| 美女精品在线| 蜜臀va亚洲va欧美va天堂| 免费在线观看日韩欧美| 99久久精品国产亚洲精品| av免费不卡国产观看| 欧美片第1页| 久久精品一区二区不卡| 亚洲第一精品影视| 亚洲男女av一区二区| 伊人久久婷婷| 玖玖玖国产精品| 蜜桃视频一区二区三区在线观看| 久久亚洲美女| 天堂久久av| 国产乱码精品一区二区亚洲| 国产美女亚洲精品7777| 久久精品免视看国产成人| 高清不卡亚洲| 久久麻豆精品| 中文在线不卡| 日韩福利视频网| 精品五月天堂| 国产91精品对白在线播放| 亚洲欧美视频| 日本aⅴ免费视频一区二区三区| 国产视频网站一区二区三区| 动漫av一区| 欧美粗暴jizz性欧美20| 亚洲精品护士| 免费在线播放第一区高清av| 中文字幕在线看片| 免费不卡中文字幕在线| 中文字幕视频精品一区二区三区 | 国产国产精品| 四虎精品一区二区免费| 欧美黑人做爰爽爽爽| 伊伊综合在线| 免费国产亚洲视频| 久久国产婷婷国产香蕉| 成人一区而且| 男人天堂欧美日韩| 国产精品密蕾丝视频下载| 国产精品久久观看| 妖精视频成人观看www| 欧美精品中文| 日韩欧美精品一区| 夜久久久久久| 欧美激情久久久久久久久久久| 色爱综合av| 日韩专区视频网站| 捆绑调教日本一区二区三区| 老牛影视一区二区三区| 精品一区视频| 丝袜诱惑制服诱惑色一区在线观看| 国产欧美日韩视频在线| 久久久久美女| 国产精品久av福利在线观看| 色在线视频观看| 婷婷五月色综合香五月| 亚洲日本网址| 日韩精品一页| 日韩欧美在线中字| 日本成人精品| 欧美特黄一级大片| 国产精品1区| 免费观看久久久4p| 婷婷激情一区| 欧美黄页在线免费观看| 热久久久久久久| 欧美日韩免费看片| 国产日韩在线观看视频| 最新日韩欧美| 日韩电影免费网站| 国产精品一级| 中文字幕免费一区二区| 999国产精品永久免费视频app| 97久久亚洲| 在线一区视频| 久久精品亚洲欧美日韩精品中文字幕| 国产私拍福利精品视频二区| 在线亚洲自拍| 日韩免费小视频| 久久影视三级福利片| 亚洲人www| 国产精品美女久久久| 日本韩国欧美超级黄在线观看| 老司机免费视频一区二区| 日韩精品久久久久久| 在线亚洲精品| 欧美福利在线| 久久精品国产亚洲夜色av网站 | 亚洲一区二区三区四区五区午夜 | 国产精品久久国产愉拍| 午夜久久av| 亚洲欧美激情诱惑| 亚洲国产专区校园欧美| 黄色欧美在线| 国产精品第一国产精品| 亚洲精品亚洲人成在线观看| 欧美成人久久| 亚洲福利国产| 国产一区二区精品福利地址| 热久久久久久| 日韩精品一区二区三区免费视频| 国产麻豆综合| 久久午夜精品一区二区| 在线一区视频| 免费日韩一区二区| 热久久免费视频|