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

首頁 > 編程 > PHP > 正文

實例比較php方法重載的兩種方式

2020-03-22 18:53:25
字體:
來源:轉載
供稿:網友
“重載”是類的多態的一種實現。函數重載指一個標識符被用作多個函數名,且能夠通過函數的參數個數或參數類型將這些同名的函數區分開來,調用不發生混淆。這樣做的主要好處就是,不用為了對不同的參數類型或參數個數,而寫多個函數。

多個函數用同一個名字,但參數表,即參數的個數或(和)數據類型可以不同,調用的時候,雖然方法名字相同,但根據參數表可以自動調用對應的函數。

PHP4 中僅僅實現了html' target='_blank'>面向對象的部分的、簡單的功能,而 PHP5 以后對對象的支持就強大的多了。

對于多態的實現,PHP4 只支持覆蓋(override),而不支持重載(overload)。但我們可以通過一些技巧來“模擬”重載的實現。

PHP5 雖然可以支持覆蓋和重載,但重載在具體實現上,和其他語言還有較大的差別。

1,在 PHP4 中“模擬”重載

試看以下代碼:

<?php //根據參數個數選擇執行不同的方法(在 PHP4 中模擬"重載"(多態的一種) class Myclass { function Myclass() { $method = "method" . func_num_args(); $this->$method(); } function method1($x) { echo "method1"; } function method2($x, $y) { echo 'method2'; } } //通過在類中的額外的處理,使用這個類對用戶是透明的: $obj1 = new Myclass('A'); //將調用 method1 $obj2 = new Myclass('B','C'); //將調用 method2 ?>

以上代碼中,通過在構造函數中使用 func_num_args() 函數取到參數的個數,自動執行 method1 或 method2 方法。我們可以結合函數 func_get_arg(i) 和 func_get_args() 對以上示例進行改進。

2,在 PHP5 中使用重載

先看以下示例:
代碼如下:

<?php class Myclass { public $attriable; public $one = "this is one"; public $two = "this is two"; function construct() { } function one($one) { $this->one=$one; $this->attriable = $this->one; } function one($one, $two) { $this->one=$one; $this->two=$two; $this->attriable = $this->one . $this->two; } function display() { echo $this->attriable; } } $one = "this is my class"; $two = "Im the best"; $myclass = new myclass(); $myclass->one($one); $myclass->display(); $myclass->one($one, $two); $myclass->display(); //本例的做法,在 PHP 中是不正確的! ?>


使用過 C++、Java、C# 重載的人,很習慣地就會寫出以上的重載實現的 PHP 代碼。但這在 PHP5 中是不正確的。PHP5 并不是對前述幾種語言的模仿,而是有自己的一套實現方法重載的方法(是好是壞,這里不討論)。 雖說 PHP5 的類較 PHP4 強大了許多,但是在“重載”這個問題上并沒有像我們預期的那樣“改善”。在“強”類型的語言中可以通過不同的參數類型來實現“重載”,比如C++、Java、C# 等。在“固定參數”傳遞的語言中,還可以通過參數的個數進行傳遞,比如 Java,但是 PHP 是弱類型語言,因此不會出現類似以上的“重載”。

PHP5 中重載可以通過 get, set, and call 幾個特殊方法來進行。當 Zend 引擎試圖訪問一個成員并沒有找到時,PHP將會調用這些方法。

在以下示例中,get和set代替所有對屬性變量數組的訪問。如果必要,你還可以實現任何類型你想要的過濾。例如,腳本可以禁止設置屬性值, 在開始時用一定的前綴或包含一定類型的值。call 方法說明了你如何調用未經定義的方法。你調用未定義方法時,方法名和方法接收的參數將會傳給call方法, PHP傳遞call的值返回給未定義的方法。
代碼如下:

<?php class Overloader { private $properties = array(); function get($property_name) { if(isset($this->properties[$property_name])) { return($this->properties[$property_name]); } else { return(NULL); } } function set($property_name, $value) { $this->properties[$property_name] = $value; } public function call($method, $p) { print("Invoking $method()<br>/n"); //print("Arguments: "); //print_r($args); if($method == 'display') { if(is_object($p[0])) $this->displayObject($p[0]); else if(is_array($p[0])) $this->displayArray($p[0]); else $this->displayScalar($p[0]); } } public function displayObject($p) { echo ("你傳入的是個對象,內容如下:<br>"); print_r($p); echo "<hr>"; } public function displayArray($p) { echo ("你傳入的是個數組,內容如下:<br>"); print_r($p); echo "<hr>"; } public function displayScalar($p) { echo ("你傳入的是個單獨變量,內容如下:<br>" . $p); echo "<hr>"; } } $o = new Overloader(); //調用 set() 給一個不存在的屬性變量賦值 $o->dynaProp = "Dynamic Content"; //調用 get() print($o->dynaProp . "<br>/n"); //調用 call() //$o->dynaMethod("Leon", "Zeev"); $o->display(array(1,2,3)); $o->display('Cat'); ?>

以上代碼中,調用了 display() 方法,可以根據參數的類型和個數調用類中的對應的代碼段,從而實現了對象方法的重載。

以上就是實例比較php方法重載的兩種方式的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人永久免费| 自拍偷拍亚洲在线| 久久久中精品2020中文| 久久国产加勒比精品无码| 91精品国产色综合| 亚洲精品国产福利| 日韩av快播网址| 国产精品人成电影在线观看| 国产日韩欧美中文在线播放| 在线免费看av不卡| 高清亚洲成在人网站天堂| 亚洲精品美女久久久| 欧美日韩国产91| 国产福利精品av综合导导航| 日本在线精品视频| 亚洲偷熟乱区亚洲香蕉av| 国产一区玩具在线观看| 最近2019中文字幕一页二页| 日韩美女在线看| 欧美人交a欧美精品| 日本韩国在线不卡| 亚洲精品资源在线| 欧美成人在线网站| 亚洲欧美国产一区二区三区| 91美女高潮出水| 亚洲人精品午夜在线观看| 亚洲人成电影网站色xx| 国产精品观看在线亚洲人成网| 亚洲最新视频在线| 国产成人avxxxxx在线看| 日韩中文在线中文网三级| 久久精品国产清自在天天线| 一区二区三区四区在线观看视频| 欧美成人免费在线观看| 日韩欧美亚洲成人| 精品福利在线看| 久久色在线播放| 日本高清不卡的在线| 亚洲va男人天堂| 欧美日韩人人澡狠狠躁视频| 亚洲自拍偷拍区| 在线视频欧美日韩精品| 韩国视频理论视频久久| 怡红院精品视频| 日韩精品视频免费在线观看| 91日本视频在线| 国产精品老女人视频| 一区二区三欧美| 国产精品高潮呻吟视频| 久久久伊人日本| 国产亚洲成av人片在线观看桃| 日韩在线观看免费全| 在线日韩中文字幕| 国内伊人久久久久久网站视频| 成人伊人精品色xxxx视频| 日本一区二区在线免费播放| 亚洲日韩中文字幕在线播放| 78色国产精品| 久久精品99国产精品酒店日本| 亚洲人成电影网站| 亚洲天堂av在线免费观看| 久久香蕉国产线看观看av| 麻豆一区二区在线观看| 国产va免费精品高清在线观看| 日韩免费av片在线观看| 精品久久久一区| 在线观看国产成人av片| 国产精品免费网站| 亚洲国产高清高潮精品美女| 久久精品成人动漫| 欧美成人激情视频免费观看| 久久久久久综合网天天| 91日韩在线播放| 日韩av在线最新| 一区国产精品视频| 中文字幕久久久| 国产精品美乳在线观看| 精品无人区乱码1区2区3区在线| 国产区精品在线观看| 日韩av网址在线| 96精品视频在线| 国产精品久久久久久久久久久久久久| 亚洲精品一区中文字幕乱码| 国内精品免费午夜毛片| 国产日韩换脸av一区在线观看| 欧美日韩国产一区二区三区| 亚洲精品日韩在线| 久久中文精品视频| 菠萝蜜影院一区二区免费| 国产狼人综合免费视频| 亚洲一区精品电影| 亚洲精品黄网在线观看| 久久久久久久国产精品视频| 日韩亚洲精品电影| 亚洲欧美精品一区| 伊人久久大香线蕉av一区二区| 亚洲国产中文字幕在线观看| 久久综合色88| 亚洲女人天堂网| 狠狠久久亚洲欧美专区| 国产福利精品av综合导导航| 国产亚洲精品91在线| 欧美激情va永久在线播放| 在线播放国产一区二区三区| 欧美亚洲在线观看| 少妇激情综合网| 国产精品偷伦视频免费观看国产| 国内精品模特av私拍在线观看| 国产网站欧美日韩免费精品在线观看| 午夜免费在线观看精品视频| 国产日韩欧美在线视频观看| 亚洲美女视频网站| 亚洲美女视频网| 黑人巨大精品欧美一区二区一视频| 中文字幕欧美专区| 欧美日韩精品在线视频| 国产精品免费小视频| 欧美天堂在线观看| 亚洲自拍偷拍第一页| 成人精品一区二区三区电影免费| 日韩av在线免播放器| 国产va免费精品高清在线观看| 久久精品国产一区| 最好看的2019年中文视频| 国产精品狼人色视频一区| 亚洲精品在线不卡| 久久在精品线影院精品国产| 久久久女女女女999久久| 成人黄色av网站| 日韩成人中文字幕在线观看| 久久精品视频在线播放| 精品久久香蕉国产线看观看gif| 一区二区三区视频在线| 欧美午夜宅男影院在线观看| 亚洲色图欧美制服丝袜另类第一页| 久久精品亚洲热| 亚洲iv一区二区三区| 中文字幕久久亚洲| 亚洲精品99久久久久| 日韩av在线导航| 国产亚洲a∨片在线观看| 激情亚洲一区二区三区四区| 深夜精品寂寞黄网站在线观看| 欧美日韩在线观看视频| 亚洲视频专区在线| 2019国产精品自在线拍国产不卡| 亚洲精品影视在线观看| 亚洲曰本av电影| 久久激情视频免费观看| 日韩精品在线观看一区二区| 78m国产成人精品视频| 亚洲一区二区在线播放| 日韩电影在线观看永久视频免费网站| 国产精品亚洲аv天堂网| 热久久99这里有精品| 亚洲欧美国产精品专区久久| 亚洲国产成人在线播放| 日韩精品中文字幕有码专区| 97色在线视频观看| 欧美激情精品久久久| 中日韩美女免费视频网址在线观看| 日韩在线播放视频| 亚洲女在线观看| 中文字幕在线看视频国产欧美在线看完整|